日期:2014-05-20  浏览次数:20965 次

关于C#调用C++编写的DLL的问题,找不到指定模块
在C#编写的程序中调用一个C++编写的DLL文件,调试之后没有问题,我想把程序放到别的电脑上(已经安装了.net Framework)运行,我生成了release版本的.exe,运行之后,报错如下:

///////////////////////////////////////
有关调用实时(JIT)调试而不是此对话框的详细信息,
请参见此消息的结尾。

************** 异常文本 **************
System.DllNotFoundException: 无法加载 DLL“DataMatrixEncoder.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。
  在 MagicCube_v2_Demo.DataMatrix.dataMatrixEncode(String barcode, Int32 barsize)
  在 MagicCube_v2_Demo.DataMatrix.CreateCode(String codestr) 位置 C:\Documents and Settings\zhanghuazhong\桌面\ImageClassify\图像分类\水印提取\DataMatrix.cs:行号 46
  在 图像分类.frm_AddWM.btn_create_Click(Object sender, EventArgs e) 位置 C:\Documents and Settings\zhanghuazhong\桌面\ImageClassify\图像分类\图像分类\Form1.cs:行号 72
  在 System.Windows.Forms.Control.OnClick(EventArgs e)
  在 System.Windows.Forms.Button.OnClick(EventArgs e)
///////////////////////////////////////////

我在程序中是通过DllImport导入DataMatrixEncoder.dll文件的。

请大家指教,急!

------解决方案--------------------
这类问题,一般有一下方面的原因:

1、路径指定不正确:
[DllImport("ExamDll.dll", EntryPoint = "test")]
private static extern bool dll_test(bool param);

这是相对路径的写法,你的dll要把放在bin目录下!
一个保险的做法,用绝对路径:
[DllImport(@"E:\pvcs\utscada\Debug\ExamDll.dll", EntryPoint = "test")]
private static extern bool dll_test(]bool param);

2、缺少相关依赖的dll:
如果按1的做法,还是报这个错误,最有可能的就是C++的dll还依赖其他的dll,
你要DEPENDS.EXE工具打开看看依赖哪些dll,都拷贝到bin目录下!

------解决方案--------------------
探讨
这类问题,一般有一下方面的原因:

1、路径指定不正确:
[DllImport("ExamDll.dll", EntryPoint = "test")]
private static extern bool dll_test(bool param);

这是相对路径的写法,你的dll要把放在bin目录下!
一个保险的做法,用绝对路径:
[DllImport(@"……