0

私は、ac# ライブラリからエクスポートされた構造体の配列を C++ コードに渡そうとしています。目的は、構造体の SAFEARRAY を C++ から C# に渡すことです。

私はからの指示に従いました

http://limbioliong.wordpress.com/2011/07/16/marshaling-a-safearray-of-managed-structures-by-com-interop-part-2/

しかし、 GetRecordInfoFromTypeInfo の呼び出しでこのエラーが発生します

0x80028019 古い形式または無効なタイプ ライブラリです。

4

2 に答える 2

1

構造体に文字列が含まれていますか? その場合は、[MarshalAs(UnmanagedType.BStr)] でタグ付けしてください。COM には制限があります。構造体の配列内の文字列は BSTR でなければなりません。TLBExp のデフォルトは LPWSTR であり、呼び出しは終了します。ここを参照してください: http://msdn.microsoft.com/en-us/library/z6cfh6e6(v=vs.100).aspx

于 2012-10-16T22:09:00.263 に答える
1

ディスパッチ インターフェイスが必要ない場合は、次のようにします。

void MyMethod([MarshalAs(UnmanagedType.LPArray, SizeParamIndex=1)] MyStruct[] data, long size);

SAFEARRAY を使用する必要がある場合は、次のように動作することを期待します (ただし、現時点で Windows マシンを使用できないため、100% 確実ではありません)。

void MyMethod([MarshalAs(UnmanagedType.SafeArray, SafeArraySubType=VarEnum.VT_USERDEFINED)] MyStruct[] data);

structに変更する余裕がある場合はclass、これも機能し、UDT の手間を省くことができます。

void MyMethod([MarshalAs(UnmanagedType.SafeArray, SafeArraySubType=VarEnum.VT_UNKNOWN)] MyStruct[] data);
于 2012-09-21T20:01:09.057 に答える