首页 新闻 会员 周边 捐助

C#关于dllimport 路径问题

0
悬赏园豆:20 [已解决问题] 解决于 2016-03-17 15:52

客户给了我一个第三方封装的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 在同一个目录内的。东软那边说应该可以调用的....但是我放的是同一目录就是不行。。。。请博友们帮帮忙

Jession.的主页 Jession. | 初学一级 | 园豆:96
提问于:2016-03-06 12:41
< >
分享
最佳答案
0

exe或dll所依赖的c++ dll查找路径有好几个的:

  1. 当前路径根目录
  2. system文件夹
  3. windows文件夹
  4. path环境变量定义的所有目录

它们之间还是有优先级关系的。去下载一个Dependency Walker(depends.exe)即可查看dll的依赖项路径。一般大多是path环境变量定义的不一样。

不过,dll依赖是比较复杂的事情,它们的依赖关系是树型的,使用pinvoke的时候错误提示信息也不大靠谱,你程序中提示找不到b.dll还有可能不是找不到b.dll, 而是找不到b.dll所依赖的c.dll的,或者b.dll所依赖的c.dll加载失败(版本和原来的机器不一致)。

收获园豆:20
天方 | 大侠五级 |园豆:5432 | 2016-03-09 00:26

 嗯 我也怀疑是C.dll 的问题 但是我在delphi 开发的程序上能正常运行 一模一样的东西。这个问题很困扰 导致下面的事情进展不下去

Jession. | 园豆:96 (初学一级) | 2016-03-09 17:23
其他回答(2)
0

默认情况下 会先找安装目录 若没有 会去系统目录查找 建议将dll拷贝到exe所在文件夹内

我丫的是条鱼 | 园豆:240 (菜鸟二级) | 2016-03-07 08:45

 我就是放在一个目录的 

支持(0) 反对(0) Jession. | 园豆:96 (初学一级) | 2016-03-09 17:23
0

默认情况就是楼上说的。也可以试试用Environment类设置环境变量,把需要的dll都放到这个文件夹里。

乐水悠悠 | 园豆:192 (初学一级) | 2016-03-07 11:20

 可以具体点点儿嘛

 

支持(0) 反对(0) Jession. | 园豆:96 (初学一级) | 2016-03-09 17:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册