【发布时间】:2012-12-07 18:58:31
【问题描述】:
我有一个带有以下签名的 C# 函数:
int Get1251Bytes(string source, byte[] result, Int32 lengthOfResult)
我从 C++ 中调用它。编译器告知我第二个参数必须具有SAFEARRAY* 类型。所以我这样称呼它:
SAFEARRAY* safeArray = SafeArrayCreateVector(VT_UI1, 0, arrayLength);
char str[] = {'s', 't', 'a', 'c', 'k', '\0'};
converter->Get1251Bytes(str, safeArray, arrayLength);
但是 safeArray 没有更新,它仍然包含 zores。但我在 C# 单元测试中测试了Get1251Bytes 函数。它可以正常工作并更新result 数组。我做错了什么?
【问题讨论】:
-
我对 C# 了解 zero,但是
byte[] result是否需要作为ref类型传入(如果您打算更新,也需要使用lengthOfResult它也是)? -
我没有,我想。数组是 C# 中的引用类型,我不会更改数组的引用本身(只是编辑元素的值)。在这种情况下,它应该通过引用进行更新。
-
值得一试。就像我说的,关于 C# 的 zilch 知识。有趣的问题。