2

C# クラスに次の COM 可視プロパティがあります。

[ComVisible]
bool[] Values;

C++ でクラスのインスタンスがあり、次のコードを使用してこのプロパティを設定しました (疑似コードのみ)。

CComSafeArray<VARIANT_BOOL> values(3);
values[0] = VARIANT_FALSE;
values[1] = VARIANT_FALSE;

HRESULT hr = instance->put_Values(values.Detach());

上記のコードの最後の行は、COR_E_SAFEARRAYTYPEMISMATCH (0x80131533) を返します。BYTE と VARIANT (BOOL を使用) を試しましたが、成功しませんでした。

誰でも助けてもらえますか?

4

1 に答える 1

2

理解するのに少し時間がかかりましたが、理解できました: VT_BOOL を 2 番目のテンプレート パラメーターとして CComSafeArray に渡します。

CComSafeArray<VARIANT_BOOL, VT_BOOL> values(3);

そのテンプレート パラメーターがないと、SAFEARRAY は VARTYPE VT_I2 (VARIANT_BOOL はshortのエイリアスであるため、2 バイトの整数) で作成されます。これは、型bool[]の C# プロパティが期待するものではありません。

于 2013-02-05T12:40:51.973 に答える