Что не так с моим маршалингом для импорта C # DLL этой функции C ++?

Я пытаюсь вызвать функцию в 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);

0

Решение

Я уверен, что вы не хотите, чтобы ссылка на массивы. Это предполагает, что тип в C ++ будет int **, например, вместо int *.

Кроме того, вы, вероятно, увеличите общую скорость своего кода, если сократите количество параметров (поместив их в некую структуру). Процессор должен выдвинуть массу аргументов, что занимает много времени, когда их так много.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]