【发布时间】:2012-11-19 05:24:29
【问题描述】:
我有一个带有以下声明(接口和实现)的托管函数:
[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 方面比我有更多经验的人可以对此有所了解吗?此外,可能值得一提的是,我从托管函数返回ValueTypes 没有问题(如果你好奇的话,boolean),关于返回String 数组的一些事情搞砸了。谢谢!
【问题讨论】:
标签: c# c++ .net interop marshalling