c# コードから c++ dll ライブラリ (ソース コードがありません) にアクセスする必要があります。
たとえば、次の関数:
UINT32 myfunc1()
UINT32 myfunc2(IN char * var1)
UINT32 myfunc3(IN char * var1, OUT UINT32 * var2)
myfunc1 の場合、次のコードを使用しても問題はありません。
[DllImport("mydll.dll")]
public static extern int myfunc1();
一方、myfunc2 と myfunc3 は使用できませんでした。myfunc2 については、次のことを試しました:(そして他の多くの人は必死に)
[DllImport("mydll.dll")]
public static extern int myfunc2(string var1);
[DllImport("mydll.dll")]
public static extern int myfunc2([MarshalAs(UnmanagedType.LPStr)] string var1);
[DllImport("mydll.dll")]
public static extern int myfunc2(char[] var1);
しかし、それらのすべてが次のエラーを出しました:
"Managed Debugging Assistant 'PInvokeStackImbalance' has detected a problem in 'C:\Users\....\myproject\bin\Debug\myproj.vshost.exe'.
追加情報: PInvoke 関数の呼び出しにより'myproject!myproject.mydll::myfunc2'
、スタックのバランスが崩れました。これは、マネージド PInvoke 署名がアンマネージド ターゲット シグネチャと一致しないことが原因である可能性があります。PInvoke シグネチャの呼び出し規約とパラメーターがターゲットのアンマネージド シグネチャと一致することを確認してください。」
私が何をすべきかについてのガイドをお願いします。