2

我遇到了与这个问题中的海报完全相同的问题。我有一个 Visual Studio C# 项目,我试图从中调用另一个 DLL 中的函数(这也是解决方案的一部分)。

DLL 是 C++ 的,我试图调用的导出函数在 C# 中声明如下:

[DllImport("SomeDLL.dll")]
private extern static IntPtr SomeFunction(IntPtr someVar1, IntPtr someVar2, bool someVar3);

当我尝试从 C# 调用该函数时,我在调试器的控制台输出中看到以下内容:

'MyApp.exe': 加载'C:\SomePath\Build\Eddy\Debug\SomeDLL.dll'
'MyApp.exe': 卸载'C:\SomePath\Build\Eddy\Debug\SomeDLL.dll'
'MyApp.exe ': 已加载 'C:\SomePath\Build\Eddy\Debug\SomeDLL.dll'
'MyApp.exe': 已卸载 'C:\SomePath\Build\Eddy\Debug\SomeDLL.dll'

我得到以下错误对话框:

无法加载 DLL 'SomeDLL.dll':找不到指定的模块。(来自 HRESULT 的异常:0x8007007E)

有问题的代码在我的同事 Windows XP 机器上运行良好。解决方案中还有另一个 C++ DLL 可以正常工作。

4

1 回答 1

2

问题似乎是 SomeDll.dll 无法加载。为什么会发生这种情况有几个不同的原因,其中一些是:

  1. dll 是 32 位的,而您正在运行 64 位进程(或相反)。
  2. SomeDLL.dll 有一些不可用的附加依赖项(其他 dll:s 或 COM 组件)。

您可以在 somedll.dll 上运行 Dependeny Walker: http://www.dependencywalker.com/以查看问题是否出在第 2 点。

于 2010-09-07T06:05:37.867 回答