召集會議

呼叫函式有幾種約定,指定誰(呼叫者或被呼叫者)從堆疊中彈出引數,如何傳遞引數以及按什麼順序傳遞引數。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 )時,指向該類的指標將作為第一個引數傳遞。