各位老师好:
我现在有一个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的同一目录下吗?
Miscore.rar
上面是这个dll及对应的lib。我在dll中输出了二个函数:用MISSX.ma调用MISSX.dll,MISSX.dll中调用了MisCore.dll中的任一个函数都出现下列错误:
操作系统无法加载 E:\MSCE-APP\MisSX\x64\Release\MISSX.dll,错误 126。MDL 加载器: 无法加载库(DLL 或 MDL 共享库) MISSX
当我在MISSX,dll中把这二个函数关掉,一切正常。不知什么原因?
MSCORE_EXPORT void PrintInfo(void){ NotificationManager::OutputMessage (NotifyMessageDetails(OutputMessagePriority::Info, L"这是MisCore.dll")); return;}
DLLEXPORT BentleyStatus CreateText(EditElementHandleR eeh, // <= 生成的文本元素ElementHandleCP templateEh, // => 样板元素WCharCP textString, // => 文本字符串DPoint3d *userOrigin, // => 文本原点RotMatrix *rMatrix, // => 旋转矩阵TextSizeParam *textSize, // => 文本大小参数TextParamWide *textParam, // => 文本参数TextFieldPtr textField, // => 文本域WCharCP fontName // => 文本字体名:L"宋体")
3858.Miscore.rar
我在我的项目里边调用您这两个函数没有问题,所以方便的话可以将您的TeamViewID及密码发送到我的邮箱,我远程看一下
TeamViewID是什么?没用过呀。
我认为是这样:MS原则上只负责装载ma所对应的dll,至于其他的外部dll,它不负责自动装载,不管该dll在哪个目录下。
我把xxx.dll用其他的ma先装载(LOADLIBRARY),然后再装载我的zzz.ma就OK了,也就是说 --- 在ma对应的dll调 用另外一个dll前,必须先将其装载至内存!MSCE真够笨的。
TeamViewer微软的一个免费远程软件,请下载一个,将您的ID和Password发给我,我这边不存在您说的现象。所以可能是其他的地方有问题
Answer Verified By: mz z