从非托管 C DLL 导入函数
以下是如何导入在非托管 C++ DLL 中定义的函数的示例。在“myDLL.dll”的 C++源代码中,定义了函数 add
:
extern "C" __declspec(dllexport) int __stdcall add(int a, int b)
{
return a + b;
}
然后它可以包含在 C#程序中,如下所示:
class Program
{
// This line will import the C++ method.
// The name specified in the DllImport attribute must be the DLL name.
// The names of parameters are unimportant, but the types must be correct.
[DllImport("myDLL.dll")]
private static extern int add(int left, int right);
static void Main(string[] args)
{
//The extern method can be called just as any other C# method.
Console.WriteLine(add(1, 2));
}
}
有关为何需要 extern "C"
和 __stdcall
的说明,请参阅调用约定和 C++名称修改 。
寻找动态库
首次调用 extern 方法时,C#程序将搜索并加载相应的 DLL。有关搜索查找 DLL 的位置以及如何影响搜索位置的详细信息,请参阅此 stackoverflow 问题 。