S
snmailbox
Unregistered / Unconfirmed
GUEST, unregistred user!
在DLL的全局单元中声明了全局的WordApp,WordDoc变量及操作函数,单元如下:
unit uPub;
interface
uses Forms,Windows,SysUtils,Classes,IniFiles,DBGrids,DB,DBTables,ComObj;
procedure InitWord;stdcall;
function SendWorkSheet:integer;stdcall;
procedure EndDLL;stdcall;
var
WordApp : OleVariant;
WordDoc : OleVariant;
implementation
//---在后台启动Word应用
procedure InitWord;stdcall;
begin
//***创建Word应用
try
WordApp := CreateOleObject('Word.Application');
WordApp.Visible := False;
except
Application.MessageBox('您的机器中没有安装Word,不能生成Word文档!','提示',MB_OK+MB_ICONWARNING);
end;
end;
//---生成word文件
function GenWordFile:integer;stdcall;
begin
//***创建Word文档
WordApp.Documents.Add(ExtractFileDir(ParamStr(0))+'/template.dot',False,0);
end;
//---释放Word
procedure EndDLL;stdcall;
begin
if not VarIsEmpty(WordApp) then WordApp.Quit;
if not VarIsEmpty(WordApp) then WordApp := Unassigned;
end;
*************************************************************************
然后由VC++ 6.0编写的程序调用DLL中的这两个Word函数,首先执行InitWord,没有问题,但之后执行GenWordFile函数时,提示“应用程序调用一个已为另一线程整理的界面”错误,是什么原因????????????
而且在调用EndDll函数时也报同样错误。
unit uPub;
interface
uses Forms,Windows,SysUtils,Classes,IniFiles,DBGrids,DB,DBTables,ComObj;
procedure InitWord;stdcall;
function SendWorkSheet:integer;stdcall;
procedure EndDLL;stdcall;
var
WordApp : OleVariant;
WordDoc : OleVariant;
implementation
//---在后台启动Word应用
procedure InitWord;stdcall;
begin
//***创建Word应用
try
WordApp := CreateOleObject('Word.Application');
WordApp.Visible := False;
except
Application.MessageBox('您的机器中没有安装Word,不能生成Word文档!','提示',MB_OK+MB_ICONWARNING);
end;
end;
//---生成word文件
function GenWordFile:integer;stdcall;
begin
//***创建Word文档
WordApp.Documents.Add(ExtractFileDir(ParamStr(0))+'/template.dot',False,0);
end;
//---释放Word
procedure EndDLL;stdcall;
begin
if not VarIsEmpty(WordApp) then WordApp.Quit;
if not VarIsEmpty(WordApp) then WordApp := Unassigned;
end;
*************************************************************************
然后由VC++ 6.0编写的程序调用DLL中的这两个Word函数,首先执行InitWord,没有问题,但之后执行GenWordFile函数时,提示“应用程序调用一个已为另一线程整理的界面”错误,是什么原因????????????
而且在调用EndDll函数时也报同样错误。