我试图从C#/ .net调用C ++ DLL中的函数。我认为我如何编组数据有问题。函数调用运行但返回值(最后7个变量)都设置为0,并且数组设置为1的长度(我假设这是DLL在接收无法使用的数据时的预期行为)。
C ++ DLL编译为32位。
这是C ++标题:
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);
答案 0 :(得分:2)
我很确定你不希望数组上的引用。这表明C ++中的类型将是int **而不是int *。
此外,如果减少参数数量(通过将它们放在某种结构中),您可能会提高代码的整体速度。处理器必须推出大量的论据,当你拥有其中许多论证时需要花费很多时间。