发现了一个DELPHI当中可以算是BUG的问题.(0分)

L

liguang

Unregistered / Unconfirmed
GUEST, unregistred user!
以下摘自我的TIPS库.
在编写一个DLL的导出函数时需要调用一个COM组件,可是当外部程序调用这个DLL的导出函数
时执行到建立COM组件处就是出错.经过调试应该在实现这个导出DLL函数的单元内加上对COM
的初始化语句.
initialization
Coinitialize(nil);
finalization
CoUninitialize;
这样就没事了.
现在过了二三个小时之后.发现了一个DELPHI的BUG.
DELPHI的COMOBJ,单元的initialization段代码如下:
initialization
begin
LoadComExProcs;
VarDispProc := @VarDispInvoke;
DispCallByIDProc := @DispCallByID;
SafeCallErrorProc := @SafeCallError;
if not IsLibrary then
begin
SaveInitProc := InitProc;
InitProc := @InitComObj;
end;
end;

其中比较靠后的一段会判断是不是库,如果是库的话则不进行当前COM对象的初始化操作
(在InitComObj方法中实现)。这种写法是为了ActiveX Library的编写来实现的。可是他
没有想到在一个动态库中调用COM的情况。当然不行了。
2001-4-20
大家看一下吧.
 
老猫不信?不信也加分.
 
顶部