一个老版本的程序,在DCOM自动化对象的形式下(应用程序)使用正常,但最终要以COM+组件服务的(DLL)形式发布,但在COM+中运行时出现大部分原有功能正常,但只有一小部分功能,无法使用。执行过程中报告"DLLHOST异常“,然后组件崩亏!不知是什么原因,刚开始怀疑DLL下不能正常使用,最后将以前DCOM下的接口函数封装成DLL,然后测试使用正常,但将此DLL放在COM+,让COM+的接口函数实现部分,去调用此DLL。这样也会出现同样的问题。非常奇怪,不知为什么?有没有人遇过
调试欢乐多
DLL的代码就不列出了,下面是COM+服务的代码:
unit Unit1;
{$WARN SYMBOL_PLATFORM OFF}interfaceuses
ActiveX, Mtsobj, Mtx, ComObj, DmComDll_TLB, StdVcl;
function Dm_Open:integer; stdcall;external 'DmApiDll.dll' ;
function Dm_Close:integer; stdcall;external 'DmApiDll.dll' ;
function Dm_WaitTask(var chNo:integer):integer; stdcall;external 'DmApiDll.dll' ;
function Dm_RecvFax(var chNo:integer):integer; stdcall;external 'DmApiDll.dll' ;type
TFaxSvrDll = class(TMtsAutoObject, IFaxSvrDll)
protected
procedure Close; safecall;
procedure Open; safecall;
procedure RecvFax(chNo: Integer); safecall;
procedure WaitTask(chNo: Integer); safecall;
{ Protected declarations }
end;implementationuses ComServ;procedure TFaxSvrDll.Close;
begin
Dm_Close;
end;procedure TFaxSvrDll.Open;
begin
Dm_Open;
end;procedure TFaxSvrDll.RecvFax(chNo: Integer);
begin
RecvFax(chNo);
end;procedure TFaxSvrDll.WaitCall(chNo: Integer);
begin
Dm_WaitTask(chNo);
end;initialization
TAutoObjectFactory.Create(ComServer, TFaxSvrDll, Class_FaxSvrDll,
ciMultiInstance, tmApartment);
end.请大家帮我查一下错误原因,里面没有保存状态的代码啊?
错误提示是“Dllhost.exe应用程序错误”
应用程序发生异常 unknown software exception(0xc00000fd),位置为0x01885227
要终止程序,请单击“确定”
要调试程序,请单击“取消”
另外那位大侠知道通过这个地址找取错误代码。
procedure TFaxSvrDll.RecvFax(chNo: Integer);
begin
RecvFax(chNo);//应该是Dm_RecvFax(chNo)吧,呵呵,可能是笔误。
end;一般我碰到抛出的异常都是“需要加载一个dll”之类的,像内存错误这麽严重的异常还没碰到过,如有可能,连'DmApiDll.dll' 一起调试一下吧。单单一个内存错误,看不出什么东东。