非托管代码使用托管dll出错(exe与dll在不同目录)
三个烂苹果 2008-11-19 05:35:17 问题描述:
A.dll是用C#写的,引用了其他的一些C#写的dll
B.dll是用C++写的,混用了托管代码与非托管代码,B.dll的功能是使用A.dll,并把A.dll的功能以API的方式提供出来,简单讲,就是一个外部接口
exe是用纯非托管c++代码编写,使用B.dll提供的一些功能
现状是,如果A.dll,B.dll,exe,以及其他的dll放在相同目录下的话,一切OK。
但是如果把所有的dll放到子目录去的话,就会有异常。
异常的原因是CLR只会在exe的目录下寻找需要的dll,找不到会出错。
以下是失败的尝试:
尝试1:把B.dll放进子目录,其他dll和exe放在同一目录,运行正常
尝试2:把A.dll放进子目录,其他dll和exe放在同一目录,异常发生!!!
尝试3:把A.dll和exe放在同一目录,其他dll放在子目录,运行也正常,但是CLR会把A.dll用的
dll拷贝到exe相同的目录下
尝试4:想把A.dll和它所用的dll放置进global assembly cache里,但是因为需要强命名,我有些dll是其他公司提供的,不能做这个。所以这条路走死。
尝试5:使用Assembly.LoadFile来动态加载----事实证明,这条路没啥用
请各位高手提供一个解决问题的思路...不胜感激,实在没办法了。