gpt4 book ai didi

c# - 将字符串数组从托管代码编码到 native 代码

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:47:59 26 4
gpt4 key购买 nike

我有一个带有以下声明(接口(interface)和实现)的托管函数:

[return: MarshalAs(UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_BSTR)]
String[] ManagedFunction()
{
String[] foo = new String[1];
foo[0] = "bar";
return foo;
}

还有一个 native C++ 接口(interface),其方法与托管接口(interface)相同,在该接口(interface)内部,此方法具有以下声明:

void ManagedFunction(SAFEARRAY* foo); 

native 代码按以下方式调用此函数:

void NativeFunction(ManagedBinding binding)
{
CComSafeArray<BSTR> cComSafeArray;
cComSafeArray.Create();
LPSAFEARRAY safeArray = cComSafeArray.Detach();
binding.comObject->ManagedFunction(safeArray);
}

我不确定我做错了什么,但在我的托管函数被调用后,safeArray 似乎有垃圾值,在将返回值编码回 native 代码时出了点问题。在 .Net 互操作方面比我更有经验的人能否对此有所了解?此外,可能值得一提的是,我在从我的托管函数返回 ValueType 时没有遇到问题(boolean 如果你好奇的话),一些关于返回 a String 数组搞砸了。谢谢!

最佳答案

1) 你的函数返回一个SAFEARRAY,为什么你在调用函数之前分配它?
2) ManagedFunction 应该返回一个 SAFEARRAY,所以它应该得到一个 SAFEARRAY* 才能返回它!所以你应该说:

LPSAFEARRAY lpsa;
binding.comObject->ManagedFunction(&lpsa);
CComSafeArray<BSTR> cComSafeArray;
cComSafeArray.Attach(lpsa);

关于c# - 将字符串数组从托管代码编码到 native 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13654561/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com