这个问题困扰我很久了,关于关联数据库的DLL动态调用释放问题!(200分)

  • 主题发起人 主题发起人 jacklin
  • 开始时间 开始时间
J

jacklin

Unregistered / Unconfirmed
GUEST, unregistred user!
我的程序动态调用DLL,注销用户后,要把所占用的实例都释放掉,但是在 &nbsp; &nbsp; &nbsp; &nbsp;FreeLibrary(DllHandle);<br>的时候出错了。具体的原因是,我退出DLL的时候,DLL里的一个CORBACONNECTION的连接(我已经先断开了)好象还没释放完,于是在FreeLibrary的时候出错了。不知你们各位大虾有没有遇过这种情况。要如何解决呢?<br> P。S。我现在的解决办法的全部不释放,等程序退出时再统一释放,这样在2000以上的系统里不会出错,但在98系统里会弹出一个错误信息。:(
 
我以前在做DLL的时候也出现了这样的问题,当时的原因在于我返回了一个string,后来我修改为widestring后就不再报错了。提供搂主参考。
 
我并没有返回字符串的,只有调用一个函数,该声明如下:<br>&nbsp;TShowChildForm = function(vtDllParams:pointer):HWND;stdcall;返回的是创建的FORM的句柄。<br>在这个ShowChildForm里,创建了一个DATAMODULE,然后显示了个FORM,退出来时我把FORM的资源全部释放了,DATAMODULE也全部FREE了,但我在FreeLibrary的时候就会出错。<br>  如果该FORM里不关联到数据库,则不会出错的。
 
是不是你的DLL里的连接和主调程序的连接重名了
 
这个问题不存在吧,DLL里的接口声明为:function ShowChildForm(vtDllParams:pointer):HWND;export;stdcall;<br>而TShowChildForm = function(vtDllParams:pointer):HWND;stdcall;只是主程序里的调用接口声明啊。<br> 我以为各位如果有在DLL里连接数据库的话,应该也会遇到这个问题的。只是我从来没碰到有谁提问,所有的书里介绍到DLL编程时,也总是与数据库无关。
 
搞定了!!!<br><br>在DLL里的DATAMODULE里加入:<br>uses<br>......,ActiveX;<br><br>initialization<br>&nbsp; &nbsp;Coinitialize(nil);<br>finalization<br>&nbsp; &nbsp;CoUninitialize;<br>即可。
 
见者有分吧,斑竹别怪我乱给分啊。我没办法把分给自己啊,又不想它老拖着。
 
后退
顶部