次の宣言 (インターフェイスと実装の両方) を持つマネージ関数があります。
[return: MarshalAs(UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_BSTR)]
String[] ManagedFunction()
{
String[] foo = new String[1];
foo[0] = "bar";
return foo;
}
マネージ インターフェイスと同じメソッドを持つネイティブ C++ インターフェイスもあり、そのインターフェイス内に、このメソッドには次の宣言があります。
void ManagedFunction(SAFEARRAY* foo);
この関数は、次の方法でネイティブ コードによって呼び出されます。
void NativeFunction(ManagedBinding binding)
{
CComSafeArray<BSTR> cComSafeArray;
cComSafeArray.Create();
LPSAFEARRAY safeArray = cComSafeArray.Detach();
binding.comObject->ManagedFunction(safeArray);
}
何が間違っているのかわかりませんが、マネージ関数が呼び出された後safeArray
、戻り値をネイティブコードにマーシャリングしているときに何か問題が発生しているように見えます。.Net 相互運用に関して私よりも経験のある人は、これに光を当てることができますか? また、ValueType
マネージ関数から s を返すことに問題がなかったことに言及することも関係があるかもしれません (興味がある場合) 。配列をboolean
返すことについて何かが混乱しています。String
ありがとう!