System.Runtime.InteropServicesを使用してC#アプリケーションから既存のC dllを呼び出そうとしていますが、PInvoke関数とTarget関数の間で署名を一致させるのに問題があります。
対象となる機能は
__declspec(dllexport) DWORD GetSomeString(char* strOut);
そして私のPInvoke関数は
[DllImport("Existing.dll")]
public static extern uint GetSomeString([MarshalAs(UnmanagedType.LPWStr)]
string strDisplay);
関数呼び出しを行います
string tempStr = "My Output String";
uint retVal = GetSomeString(tempStr);
しかし、私はメッセージを受け取ります
Managed Debugging Assistant'PInvokeStackImbalance'が問題を検出しました......PInvoke関数'GetSomeString'の呼び出しにより、スタックのバランスが崩れました。これは、マネージドPInvokeシグニチャがアンマネージドターゲットシグニチャと一致しないことが原因である可能性があります。PInvokeシグニチャの呼び出し規約とパラメータがターゲットのアンマネージドシグニチャと一致することを確認してください。
また、PInvoke関数を次のように実装してみました
[DllImport("Existing.dll")]
public static extern uint GetSomeString([MarshalAs(UnmanagedType.LPWStr)]
StringBuilder strDisplay);
しかし、役に立たない。
誰かが私が間違っている可能性があることを知っていますか?
さらに情報が必要な場合、または私の質問が不明な場合はお知らせください。
前もって感謝します。