我在带有 .NET 4.0 的 Win7 上运行 VS2012。 我尝试了以下方法:
- 创建 C++ DLL 项目
- 选中\取消选中导出符号框
- 我已确保我的平台目标是相同的。就我而言,win32
- 我在需要的地方添加了必要的 extern "C"和 __declspec(dllexport)。
- 我已成功编译我的 DLL 并尝试在 C# 项目中引用它。
不幸的是,我收到一条错误消息,告诉我它无法添加,我需要确保它是一个有效的程序集或 COM 对象。
我已经放弃尝试让我的代码导出,所以我很高兴示例“42”通过!
我试过用 dumpbin 查看它,它正确地导出了符号:
1 0 00011023 ??0CEvolutionSimulator@@QAE@XZ
2 1 00011127 ??4CEvolutionSimulator@@QAEAAV0@ABV0@@Z
3 2 00011005 ?GetNumber@CEvolutionSimulator@@QAEHXZ
4 3 0001104B ?fnEvolutionSimulator@@YAHXZ
5 4 00017128 ?nEvolutionSimulator@@3HA
我的脑袋里满是新鲜的想法。有人可以启发我吗?无论我尝试什么,我似乎都会收到此错误。
最佳答案
您需要使用 DllImportAttribute
从您的 .NET 代码中调用驻留在您的 C++ DLL 中的函数(使用 extern "C"
导出)。您不能像 .NET 程序集那样引用 C++ DLL,也不能使用 DLL 中的类,只能使用 DllImport
ed C 类函数。
示例来自 msdn :
using System;
using System.Runtime.InteropServices;
class Example
{
// Use DllImport to import the Win32 MessageBox function.
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);
static void Main()
{
// Call the MessageBox function using platform invoke.
MessageBox(new IntPtr(0), "Hello World!", "Hello Dialog", 0);
}
}
关于c# - 从 C# 调用非托管 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18997672/