我有一个带有以下声明(接口和实现)的托管函数:
[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 interop 方面比我更有经验的人可以对此有所了解吗?ValueType
此外,可能值得一提的是,我从托管函数返回 s 没有问题(boolean
如果你好奇的话),关于返回String
数组的一些事情会搞砸。谢谢!