LoadLibrary VC生成的dll为何失败?
我在BCB 6 (updata4)中用LoadLibrary函数装载一个VC(应该是VC6或以前的VC版本)生成的dll,总是返回NULL,调用GetErrorCode函数得到错误码是126,即"找不到模块(modual)"。但是,用这个函数装载相同位置的另一个dll,就可以。重启、关闭BCB重新打开等方法均无效。
另一方面,用VC 7,可以静态调用前述有问题的dll。(已经试过,无法在BCB中静态调用,因为无法生成BCB可用的lib文件,无论是用implib对dll生成,还是用coff2omf对VC的lib文件进行转换。)
不知是何原因?莫非dll也有不同文件结构或者版本,导致VC能够加载BCB不能?
各位高人帮帮忙,谢谢。
问题点数:100、回复次数:6Top
1 楼baizhao(云散)回复于 2006-03-05 00:25:44 得分 0
不好意思,第二行打错了函数名,得到错误码的函数应该是:GetLastError()Top
2 楼0delphi(睡个舒服觉)回复于 2006-03-05 01:07:39 得分 90
用VC 7,可以静态调用前述有问题的dll。
--------------------------
用 vc 7 可以动态的调用吗?如果在那个有问题的dll中 对 dllmain有处理函数的话,动态和静态是不一样的Top
3 楼baizhao(云散)回复于 2006-03-05 01:24:56 得分 0
好,明天试一下,再回来继续请教。Top
4 楼Behard(我爱天安门)回复于 2006-03-05 13:58:42 得分 10
不理解楼主的意思 说得不够清楚Top
5 楼zyyoung(倡导开源)回复于 2006-03-05 15:16:30 得分 0
UPTop
6 楼baizhao(云散)回复于 2006-03-06 13:30:01 得分 0
谢谢大家,已经解决了。
果如0delphi(睡个舒服觉)所言,静态调用和动态不一样,试验了一下,用VC 7也无法用LoadLibrary装载那个dll。看来我对动态调用和静态调用dll的差别理解还不够深刻。
忽然想起在某个帖子上见过LoadLibraryEx,使用之,LoadLibraryEx("dll文件名",NULL,1)即可,装载成功。最后面那个参数1,在VC里面宏定义成 DONT_RESOLVE_DLL_REFERENCE,意义在MSDN里面有详解,不多说了。
谢谢各位,尤其是0delphi(睡个舒服觉)。Top




