重新定位作为参数传递的指针

Relocate pointer passed as a parameter

本文关键字:参数传递 指针 新定位 定位      更新时间:2023-10-16

我有一个将单个unsigned char*作为参数的方法。

int MyClass::MyMethod(unsigned char* resultArray)

该参数由外部 .NET 应用程序分配并传递,但该值应根据结果进行更改。

在方法的主体中,我调用以类似方式返回数组的第三方 API。

ThirdPartyAPI::GetResult(result);
int size = result.GetSize();
unsigned char* temp = new unsigned char[size];
result.GetData(temp);

现在,我的 temp 变量是一个填充数组,其中包含我需要返回到 C# 的结果。我该怎么做? 我尝试了简单的resultArray = result但这只返回一个空数组。由于 C# 应用程序无法在调用我的方法之前知道大小,因此必须将其初始化为随机长度或以空形式发送并在我的方法中调整大小。 因此,如果我能像resultArray = new unsigned char[size]这样的东西来调整它的大小,那么我可以避免复制,但这会引发异常。

实现这一目标的最佳方法是什么?

如果你对方法签名有发言权,那么把你的函数改成这个

int MyClass::MyMethod(unsigned char** resultArray)

然后你可以做

*resultArray = result;

要调用此方法,您现在必须传递指针的地址,而不仅仅是指针

MyClass m;
char *str;
m.MyMethod(&str);

替代解决方案

char* MyClass::MyMethod(int *status);

使用此签名,您只需返回字符串并修改 int 参数以包含调用的状态

MyClass m;
int status;
char *str = m.MyMethod(&status);
if (status == 0) {}
相关文章: