ちょっと初心者の質問かもしれませんが、それは過去数時間 (または数日) の間、私をピクルスに陥れているものです...
.NET Framework 4.0 のコードで DLL からメソッドを呼び出しています
[DllImport("xeneth.dll")]
public static extern ErrorCode XC_GetFrame(Int32 h, FrameType type, ulong ulFlags, IntPtr buff, uint size);
そして、ここでそれを使用します:
if (XC_GetFrame(myCam, XC_GetFrameType(myCam), 0, IntPtr.Zero, (uint)fs) != ErrorCode.E_NO_FRAME)
ただし、これを .NET 4.0 で実行すると P/INVOKE エラーが発生しますが、3.5 でこれを実行してもこのエラーは発生しません。私と別のプログラマーがコードを調べた後、4.0 での IntPtr の動作が異なっていることが判明したようです。
アプリケーションに必要ないくつかの機能は 4.0 でしか利用できないため、私のアプリケーションは .NET 4.0 で実行する必要があります ...
私が見落としている、または単に含めるのを忘れているものはありますか?
どんな考えでも大歓迎です!
トム
アップデート:
ネイティブ宣言:
virtual ErrCode XCamera::GetFrame(FrameType type, unsigned long ulFlags, void *buffer, unsigned int size)
エラー: PInvoke 関数 'DLLTest!DLLTest.Form1::XC_GetFrameType' の呼び出しにより、スタックのバランスが崩れています。これは、マネージド PInvoke 署名がアンマネージド ターゲット シグネチャと一致しないことが原因である可能性があります。PInvoke シグネチャの呼び出し規約とパラメーターがターゲットのアンマネージド シグネチャと一致することを確認します。