Я пытаюсь вызвать функцию в C ++ DLL из C # /. Net. Я считаю, что что-то не так с тем, как я собираю данные. Вызов функции выполняется, но все возвращаемые значения (последние 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);
Я уверен, что вы не хотите, чтобы ссылка на массивы. Это предполагает, что тип в C ++ будет int **, например, вместо int *.
Кроме того, вы, вероятно, увеличите общую скорость своего кода, если сократите количество параметров (поместив их в некую структуру). Процессор должен выдвинуть массу аргументов, что занимает много времени, когда их так много.
Других решений пока нет …