各位老师好:
我现在有一个zzz.ma和对用的zzz.dll,但是我的zzz.dll调用了另外一个动态链接库xxx.dll中的函数(单独编译),所有的编译和链接都通过。但是在MSCE中加载zzz.ma时,出现装载zzz.dll错误:
操作系统无法加载 E:\MSCE-APP\MisSX\x64\Release\MISSX.dll,错误 126。 MDL 加载器: 无法加载库(DLL 或 MDL 共享库) MISSX
这是怎么回事?盼解决,谢谢!
这是因为找不到依赖库所致,您将您zzz.dll调用的另外一个dll(xxx.dll)放到mstn,目录下:C:\Program Files\Bentley\MicroStation CONNECT Edition\MicroStation。另外就是同样的道理需要将xxx.dll依赖的动态库都放到MS目录下,并且保证xxx.dll是发布版而不是debug版。
我把这三个文件放在了同一个目录下,但不是C:\Program Files\Bentley\MicroStation CONNECT Edition\MicroStation目录,这样不可以吗?
另外:我如果在zzz.dll中利用VC++的loadlibrary函数手工加载xxx.dll到内存,还要求xxx.dll在ma的同一目录下吗?
您先根据我的建议把ma依赖的库放到ms目录下,ma放到mdlapls目录下,第二个问题,还是需要的。
我按照您的建议把xxx.dll放在了C:\Program Files\Bentley\MicroStation CONNECT Edition\MicroStation目录下,zzz.ma和zzz.dll放在了mdlapps目录下,且xxx.dll肯定是发布版,还是不行!这不是目录的问题,按理说这三个文件在同一个目录下即可。是不是一个dll去装载另一个dll有什么要求?
您的项目依赖的这个dll,应该又依赖于其他dll,依次类推,所有被依赖的dll都能找到才行,您可以单独编译一个c/c++的.exe项目,引用这个dll,然后看能否正常运行。