C# 无法加载非托管dll

kengzi593884695 2014-02-22 10:52:44
代码如下:
[DllImport(@"C:\Program Files\testsetup\ShareCommunication.dll", CallingConvention = CallingConvention.StdCall)]
public static extern IntPtr InitEnv();

在程序初始化加载时调用:
InitializeComponent();
string sRet = Marshal.PtrToStringAnsi(InitEnv());

已把此dll放在目录"C:\Program Files\testsetup\ShareCommunication.dll"下,在本地调试代码时不会报错的,但是打包(把所有文件加入到打包内)后在别人电脑上就报错了,之前放在程序bin目录下,代码调试也没问题,但是打包到别人电脑上就是不行

catch异常为无法加载DLL"C:\Program Files\testsetup\ShareCommunication.dll"找不到指定的模块


在环境变量path也配路径了,还是不行,大家遇过这种情况吗?
...全文
263 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhengsb 2014-02-22
  • 打赏
  • 举报
回复
ShareCommunication可能用到了第3方部件,而目标机器上没有该部件
慧眼识狗熊 2014-02-22
  • 打赏
  • 举报
回复
c#配置path路径没用的吧,你代码里写死了绝对路径那给别人安装就业必须是绝对路径。 这边写相对路径,放到bin中,发布。
  • 打赏
  • 举报
回复
让非托管dll开发者提供.net的驱动层吧。 应用为王。如果要引入非托管的dll,我们会让对方必须做一个托管的接口工程,并且经过我们严格的大规模并行测试,证明没有内存溢出。
kengzi593884695 2014-02-22
  • 打赏
  • 举报
回复
引用 1 楼 u013096183 的回复:
Dll 编译为Release
你也遇过这种情况,把DLL编译成Release就OK了吗?
稻香可乐 2014-02-22
  • 打赏
  • 举报
回复
Dll 编译为Release
kengzi593884695 2014-02-22
  • 打赏
  • 举报
回复
引用 9 楼 small21 的回复:
应该是5楼的说法。用DEPENDS看下你的dll还引用了什么。
thanks,我叫开发者帮忙看看才行
慧眼识狗熊 2014-02-22
  • 打赏
  • 举报
回复
引用 8 楼 kengzi593884695 的回复:
[quote=引用 5 楼 zhengsb 的回复:] ShareCommunication可能用到了第3方部件,而目标机器上没有该部件
但是我在本机上测试又是可以的啊?真是奇怪了[/quote] 因为你本机有ShareCommunication引用的控件,比如你装了vs2012,而有的电脑没有。
慧眼识狗熊 2014-02-22
  • 打赏
  • 举报
回复
应该是5楼的说法。用DEPENDS看下你的dll还引用了什么。


kengzi593884695 2014-02-22
  • 打赏
  • 举报
回复
引用 5 楼 zhengsb 的回复:
ShareCommunication可能用到了第3方部件,而目标机器上没有该部件
但是我在本机上测试又是可以的啊?真是奇怪了
kengzi593884695 2014-02-22
  • 打赏
  • 举报
回复
引用 4 楼 small21 的回复:
c#配置path路径没用的吧,你代码里写死了绝对路径那给别人安装就业必须是绝对路径。 这边写相对路径,放到bin中,发布。
绝对路径和相对路径都发布过了,都是不行,还是报错,估计如3楼说的需要.net的驱动
kengzi593884695 2014-02-22
  • 打赏
  • 举报
回复
引用 3 楼 sp1234 的回复:
让非托管dll开发者提供.net的驱动层吧。 应用为王。如果要引入非托管的dll,我们会让对方必须做一个托管的接口工程,并且经过我们严格的大规模并行测试,证明没有内存溢出。
谢谢

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧