繁体   English   中英

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

[英]Relocate pointer passed as a parameter

我有一个方法,它将一个unsigned char*作为参数。

int MyClass::MyMethod(unsigned char* resultArray)

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

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

ThirdPartyAPI::GetResult(result);
int size = result.GetSize();
unsigned char* temp = new unsigned char[size];
result.GetData(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) {}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM