簡體   English   中英

從C#調用dll函數時PInvokeStackImbalance

[英]PInvokeStackImbalance when calling a dll function from C#

我正在編寫一個WPF應用程序,該應用程序需要調用我編寫的dll中存在的某些C ++代碼。 即使使用最基本的測試功能,我也總是會遇到PInvokeStackImbalance錯誤。 例如,在C ++ dll中:

extern "C" __declspec(dllexport) void Test( int foo);

該功能不執行任何操作。 C#端看起來像這樣:

    [DllImport("myDll.dll", CharSet = CharSet.Auto)]
    private static extern void Test( int foo);

我將這個c#函數稱為:

測試(1)

...而我得到一個PInvokeStackImbalance! 怎么會這樣?

提前致謝...

湯姆

嘗試指定CallingConvention.Cdecl 文檔中有一個示例。 在桌面窗口上,默認的調用約定是Winapi 但是您的函數被聲明為extern C

您的[DllImport]聲明缺少CallingConvention。 這是必需的,因為您沒有使用__stdcall關鍵字,所以您的Test函數是Cdecl。 __cdecl和__stdcall之間的區別是調用后清除堆棧的方式。 __cdecl是大多數C ++編譯器(包括Microsoft的)的默認設置。 要在C ++端修復它,您可以這樣聲明:

extern "C" __declspec(dllexport) 
void __stdcall Test( int foo);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM