我对这个C ++函数的C#DLL导入进行编组有什么问题?

时间:2012-09-28 14:46:23

标签: c# c++ marshalling

我试图从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);

1 个答案:

答案 0 :(得分:2)

我很确定你不希望数组上的引用。这表明C ++中的类型将是int **而不是int *。

此外,如果减少参数数量(通过将它们放在某种结构中),您可能会提高代码的整体速度。处理器必须推出大量的论据,当你拥有其中许多论证时需要花费很多时间。