客户给了我一个第三方封装的DLL 我使用 [DllImport("SiInterface.dll", CharSet = CharSet.Ansi)] 写在类中 引用这个DLL 现在遇到的问题是
1、在VS环境中可以正常调取这个动态库 但是我把debug目录及所有文件拷贝到一台新的电脑上的时候就提示找不到这个DLL 请问是否是DllImport 引用不到文件?如果是 有什么办法看 [DllImport("SiInterface.dll", CharSet = CharSet.Ansi)] 找的具体是那个目录下找的?
这是动态库调用的关系 图
http://bbs.csdn.net/topics/391898059?page=1#
我在CSDN里面问过 博友门这些方法 我都试验过。
现在我想知道的是如何知道我使用DllImport可以使用a.dll 但是不能调用a.dll自身调用的b.dll
有什么方法可以知道a.dll 去掉用b.dll 去找的路径具体是什么?因为我a.dll 和b.dll 在同一个目录内的。东软那边说应该可以调用的....但是我放的是同一目录就是不行。。。。请博友们帮帮忙
exe或dll所依赖的c++ dll查找路径有好几个的:
它们之间还是有优先级关系的。去下载一个Dependency Walker(depends.exe)即可查看dll的依赖项路径。一般大多是path环境变量定义的不一样。
不过,dll依赖是比较复杂的事情,它们的依赖关系是树型的,使用pinvoke的时候错误提示信息也不大靠谱,你程序中提示找不到b.dll还有可能不是找不到b.dll, 而是找不到b.dll所依赖的c.dll的,或者b.dll所依赖的c.dll加载失败(版本和原来的机器不一致)。
嗯 我也怀疑是C.dll 的问题 但是我在delphi 开发的程序上能正常运行 一模一样的东西。这个问题很困扰 导致下面的事情进展不下去
默认情况下 会先找安装目录 若没有 会去系统目录查找 建议将dll拷贝到exe所在文件夹内
我就是放在一个目录的
默认情况就是楼上说的。也可以试试用Environment类设置环境变量,把需要的dll都放到这个文件夹里。
可以具体点点儿嘛