C#とDLLとのやり取りするC++/CLIで作成のラッパークラスを作成しています。
C#で定義している構造体とDLLからの呼び出す構造体が同じ構造になっています。しかし、C#とラッパー内では別々の定義にした場合は、下記のような記述ではエラーになります。
例:構造体Exampleについて、やり取りする場合
---C#からは
[StructLayout(LayoutKind.Sequential)] public struct Example { public int lMode; public int lFileSize; public ushort usUpdate; } // ラッパー関数からDLLの値を取得する Example typDummy = new Example(); uint ret = GetDLLData(ref Example) ;
---ラッパークラス(C#/CLI)からは
typedef struct { public: int lMode; public: int lFileSize; public: unsigned short unUpdate; } Example ; uint GetDLLData(Example %typDat) { return GetNativeDLL(&typDat) ; }
上記のようなコードを組むと、文法エラーが発生して、「コーディングの段階で、文法エラーが発生し、"引数2:は'a.Example'から'ref Example'に変換することはできません。"」となります。
当然のエラーですが、エラーを発生しないようにするにはどのようにコードを組めばよいのでしょうか?
なお、現在は、C++/CLI側の構造体をC#側で共通利用することで回避していますが、上記のように同じ構造だが、構造体としては別となる場合はどう記述すればいいのか教えてください。よろしくお願いします。