C# 呼び出し元の構造にデータを入力する C++ COM サーバーがあります。
構造体は、次のように C++ IDL で定義されます。
interface Icontrol : IDispatch{
[
uuid(...),
version(1.0) ]
typedef struct testStructure
{
int x;
int y;
int z;
...
} testStructure;
...
[id(9)] HRESULT getStruct([ref,in,out] testStructure * theData);
...
次に、C# コードで次のようにします。
EO_Lib.testStructure test = new EO_Lib.testStructure();
EO_Lib.getStruct(ref test);
C# にネイティブではないフィールドの C# 構造体で MarshallAs を使用するだけで、通常の .DLL で問題なく動作させることができます。しかし、それを COM .DLL で動作させることはできません。IDLについての知識が不足しているためだと思います。
私ができる必要があるのは、適切な MarshallAs() 情報で作成した新しい C# 型で getStruct() を呼び出すことです。どうすればいいですか?
Visual Studio 2010 MFC/ATL C++ と C# .NET 4 Framework を使用しています。