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);