我有一个方法,只需一个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]
这样调整大小,那么我就可以避免复制,但会引发异常。
实现这一目标的最佳方法是什么?
答案 0 :(得分:0)
如果您在方法签名中有发言权,请将您的功能更改为此
SELECT
DivisionName, CONVERT(Date, DateClosed) [DateClosed],
COUNT(CASE WHEN DateClosed BETWEEN @START AND @END AND DateCreated < @START THEN 0 END) AS PREDATED,
COUNT(CASE WHEN DateClosed BETWEEN @START AND @END AND DateCreated >= @START THEN 0 END) AS DAYOF
FROM
POS.Orders o WITH(NOLOCK)
JOIN
POS.OrderDetails od WITH(NOLOCK) ON o.OrderId = od.OrderId
JOIN
Directory.Divisions d WITH(NOLOCK) ON o.DivisionId = d.DivisionId
GROUP BY
DivisionName, DateClosed
然后你可以做
int MyClass::MyMethod(unsigned char** resultArray)
要调用此方法,您现在必须传递指针的地址而不仅仅是指针
*resultArray = result;
MyClass m;
char *str;
m.MyMethod(&str);
使用此签名,您只需返回字符串并修改int参数以包含调用的状态
char* MyClass::MyMethod(int *status);