從非託管 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 問題 。