Windows 7 中的 C# dll 问题

Posted

技术标签:

【中文标题】Windows 7 中的 C# dll 问题【英文标题】:C# dll problem in windows 7 【发布时间】:2010-09-07 05:21:02 【问题描述】:

我遇到的问题与question 中的发帖人完全相同。我有一个 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 可以正常工作。

【问题讨论】:

您已将其标记为 Windows 7 - 64 位,您的 dll 是否可能是 32 位特定的,或者它可能依赖于 32 位 dll。您可以尝试为 x86 平台构建项目并检查错误是否消失(只是看看它是否是 32 位/64 位的问题)。 【参考方案1】:

问题似乎是 SomeDll.dll 无法加载。发生这种情况的原因有多种,其中一些是:

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

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

【讨论】:

非工作 DLL 依赖于其他一些 DLL,当我将它们复制到我的 C# 项目的工作目录中时,一切正常。

以上是关于Windows 7 中的 C# dll 问题的主要内容,如果未能解决你的问题,请参考以下文章

c# 调用windows API(user32.dll)

从 C# 中的外部 DLL 访问 windows 窗体控件

在 Windows 7 中使用 VC++ 和 C# 中的 MemoryMappedFiles 或命名管道进行进程间通信

windows中LIB和DLL的区别与使用

win 7系统,开机总是弹出C:\Windows\System32\HID.DLL没有被指定在Windows上运行,或者它包含错误

无法在 C# Windows 应用程序下写入 C++ dll 项目中的文件