*** 高分求助 高分求助 高分求助 ***(50分)

  • 主题发起人 主题发起人 snmailbox
  • 开始时间 开始时间
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函数时也报同样错误。
 
你用DELPHI试试
你看一下这个函数:
function GenWordFile:integer;stdcall;
begin
//***创建Word文档
WordApp.Documents.Add(ExtractFileDir(ParamStr(0))+'/template.doc',False,0);
end;

 
我是从DOT模板文件创建,我单独试过的,没问题。
 
我也出过同样的错误
我想是因为创建后没有及时的释放,使得在进程中word应用程序还在进行
 
后退
顶部