召集會議
呼叫函式有幾種約定,指定誰(呼叫者或被呼叫者)從堆疊中彈出引數,如何傳遞引數以及按什麼順序傳遞引數。C++預設使用 Cdecl
呼叫約定,但 C#需要 StdCall
,它通常由 Windows API 使用。你需要改變一個或另一個:
-
在 C++中將呼叫約定更改為
StdCall
:extern "C" __declspec(dllexport) int __stdcall add(int a, int b)
[DllImport("myDLL.dll")]
-
或者,在 C#中將呼叫約定更改為
Cdecl
:extern "C" __declspec(dllexport) int /*__cdecl*/ add(int a, int b)
[DllImport("myDLL.dll", CallingConvention = CallingConvention.Cdecl)]
如果你想使用 Cdecl
呼叫約定和一個錯位名稱的函式,你的程式碼將如下所示:
__declspec(dllexport) int add(int a, int b)
[DllImport("myDLL.dll", CallingConvention = CallingConvention.Cdecl,
EntryPoint = "?add@@YAHHH@Z")]
-
thiscall ( __ thishisall )主要用於作為類成員的函式。
-
當函式使用 thiscall ( __ thishisall )時,指向該類的指標將作為第一個引數傳遞。