私はC++ライブラリにC#のから構造体を渡すしようとしています。私は構造体をオブジェクトとして渡し、C++関数はそれをポインタ(void *)として期待しています。構造体へのポインタとして構造体をマーシャリングするにはどうすればよいですか?
私は構造を渡し、問題が生じています。ここで
[DllImport("MockVadavLib.dll", CharSet = CharSet.Ansi)]
public static extern IntPtr TheFunction([MarshalAs(UnmanagedType.LPStruct)] UserRec userRec);
私が得るランタイム例外のテキストです。
は、「『パラメータ#1』をマーシャリングすることはできません:無効(この値の型が構造体とペアにしなければならない)/アンマネージドタイプの組み合わせを管理します。 "
私はこの文脈でLPStructを使用するMSDN記事を見つけましたが、
これは私が元帥にしようとしている私の構造である:
[StructLayout(LayoutKind.Sequential)]
public struct UserRec {
[MarshalAs(UnmanagedType.I4)]
public int userParam1;
}
これは、C++の関数である:
MOCKVADAVLIB_API tVDACQ_CallBackRec * TheFunction(void * userParams) {...
この場合でも[マーシャル]は必要ありませんと思います。 –
@Antonは、あなたが正しいです(更新) – JaredPar
終了作業結果: パブリック静的にexternのIntPtr TheFunction([MarshalAs(UnmanagedType.Struct)、あり】REF UserRec userRec)。 [MurshalAs]は明示的にするだけですが、必須ではありません。 –