gpt4 book ai didi

c# - 我对这个 C++ 函数的 C# DLL 导入的编码(marshal)处理有什么问题?

转载 作者:行者123 更新时间:2023-11-28 03:31:02 25 4
gpt4 key购买 nike

我正在尝试从 C#/.net 调用 C++ DLL 中的函数。我认为我整理数据的方式有问题。函数调用运行但返回值(最后 7 个变量)都设置为 0,并且数组的长度设置为 1(我假设这是 DLL 在接收到无法使用的数据时的预期行为)。

C++ DLL 被编译为 32 位。

这是 C++ header :

extern "C" __declspec(dllexport) void __stdcall Merchandize(int SppCode,
double DBH,
double TotHt,
double CR,
double BTR,
int *minDIBs, //array
int *minLens, //array
int *minVols, //array
int NumProducts, //array length
int maxLen,
double trimLen,
double stumpHt,
int logStep,
int *logLens, //array, understood to be 50
double *logSEDs, //array, understood to be 50
double *logVols, //array, understood to be 50
int *logGrades, //array, understood to be 50
int *NumberOfLogs,
double *merchHt,
int *errorFlag)

这是 C# dll 导入:

    [DllImport("C:\\Users\\Public\\Documents\\FVSNEMerchandizer.dll")]
static extern void MerchandizeTree(int SppCode,
double DBH,
double TotHt,
double CR,
double BTR,
ref int[] minDIBs,
ref int[] minLens,
ref int[] minVols,
int NumProducts,
int maxLen,
double trimLen,
double stumpHt,
int logStep,
ref int[] logLens,
ref double[] logSEDs,
ref double[] logVols,
ref int[] logProds,
ref int[] numLogs,
ref double merchHt,
ref int errorFlag);

最佳答案

我很确定您不希望数组上有引用。这表明 C++ 中的类型应该是 int**,而不是 int*。

另外,如果减少参数的数量(通过将它们放在某种结构中),您可能会提高代码的整体速度。处理器必须推送大量参数,当你有那么多参数时,这会花费很多时间。

关于c# - 我对这个 C++ 函数的 C# DLL 导入的编码(marshal)处理有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12642264/

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