K
kevin scott
Unregistered / Unconfirmed
GUEST, unregistred user!
请高手解决,如果分不够,可以再加,只要解决问题。
利用CORBA做分布式开发,且一定用回调。版本是Visibroker4.5
据我所知,这个版本实际上不是为Delphi开发的。
好像是用BCB写的,Delphi只是外包了一下。a
其中用到了四个dll:CC3260MT.DLL, orb_br.dll, OrbPas45.dll, vport_br.dll
这个版本的回调比3.3有了很大的改进,解决了3.3的一段时间Stub不能Bind到的致命问题
但仍有瑕疵
问题出现在 OrbPas45.pas中执行了LoadLibrary orbpas45.dll,但并没有FreeLibrary,
起初我以为Borland公司忘了写,因为这种情况下EndProcess是不会成功的,应用程序无法退出,因为有dll驻留。
于是本人自作主张加了个finally FreeLibrary
可是问题出现了,估计是那四个dll中使用到的线程问题
在程序退出时,FreeLibrary后经常会碰到地址错误,而这个地址错误应该是那四个dll所使用的线程产生的。(虽然不是每次都能碰到,但频率很高)
本人试验的情况是在ocx中肯定出现
地址错误实际上是个比较低级的错误,呵。。。。。。
但没有源代码,没有办法解决。
本人曾经想过强行kill掉这些出错的线程,但无法找到只和这四个dll相关的所有线程。
现在感觉,可能这就是为什么Delphi的源代码中为什么不执行FreeLibrary的原因了吧。呵。。。。。
利用CORBA做分布式开发,且一定用回调。版本是Visibroker4.5
据我所知,这个版本实际上不是为Delphi开发的。
好像是用BCB写的,Delphi只是外包了一下。a
其中用到了四个dll:CC3260MT.DLL, orb_br.dll, OrbPas45.dll, vport_br.dll
这个版本的回调比3.3有了很大的改进,解决了3.3的一段时间Stub不能Bind到的致命问题
但仍有瑕疵
问题出现在 OrbPas45.pas中执行了LoadLibrary orbpas45.dll,但并没有FreeLibrary,
起初我以为Borland公司忘了写,因为这种情况下EndProcess是不会成功的,应用程序无法退出,因为有dll驻留。
于是本人自作主张加了个finally FreeLibrary
可是问题出现了,估计是那四个dll中使用到的线程问题
在程序退出时,FreeLibrary后经常会碰到地址错误,而这个地址错误应该是那四个dll所使用的线程产生的。(虽然不是每次都能碰到,但频率很高)
本人试验的情况是在ocx中肯定出现
地址错误实际上是个比较低级的错误,呵。。。。。。
但没有源代码,没有办法解决。
本人曾经想过强行kill掉这些出错的线程,但无法找到只和这四个dll相关的所有线程。
现在感觉,可能这就是为什么Delphi的源代码中为什么不执行FreeLibrary的原因了吧。呵。。。。。