ホームページ  >  記事  >  バックエンド開発  >  Visual Studio 2010 で「PinvokeStackImbalance」例外が発生するのはなぜですか?

Visual Studio 2010 で「PinvokeStackImbalance」例外が発生するのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-02 22:43:30222ブラウズ

Why Am I Getting a

Visual Studio 2010 の PinvokeStackImbalance の問題

Visual Studio 2010 では、C DLL を呼び出すときに「pinvokestackimbalance」例外が頻繁に発生します。この例外は、以前 Visual Studio 2008 では無効になっていましたが、VS2010 ではデフォルトで有効になり、デバッグ作業が妨げられています。

問題の原因

コード:

<code class="csharp">[DllImport("ImageOperations.dll")]
static extern void FasterFunction(
    [MarshalAs(UnmanagedType.LPArray)]ushort[] inImage, 
    [MarshalAs(UnmanagedType.LPArray)]byte[] outImage, 
    int inTotalSize, int inWindow, int inLevel);</code>
<code class="cpp">extern "C" {
OPERATIONS_API void __cdecl FasterFunction(unsigned short* inArray, 
                                       unsigned char* outRemappedImage,
                                       int inTotalSize, 
                                       int inWindow, int inLevel);
}</code>

問題は、間違った呼び出し規約にあります。 DllImport のデフォルトは CallingConvention.WinApi で、x86 デスクトップ コードの CallingConvention.StdCall と同じです。ただし、C 関数は __cdecl 呼び出し規則を使用しますが、これは異なります。

解決策

問題を解決するには、次のように DllImport 行を編集します。

<code class="csharp">[DllImport("ImageOperations.dll", CallingConvention = CallingConvention.Cdecl)]</code>

これにより、正しい呼び出し規約が使用され、「pinvokestackimbalance」例外が解決されます。

以上がVisual Studio 2010 で「PinvokeStackImbalance」例外が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。