У меня есть функция C ++, к которой я хотел бы получить доступ из C #. Проблема в том, что я продолжаю получать исключения PInvokeStackImbalance, и я не знаю почему. Все работает нормально и, как и ожидалось, при отключении проверки этого исключения.
Подпись моей функции C ++:
extern "C" double solveQP(
int32_t n, int32_t mE, int32_t mI,
double *p_G, double *p_g0,
double *p_CE, double *p_ce0,
double *p_CI, double *p_ci0,
double *p_x)
и что я использовал для доступа к нему:
[DllImport("libQuadProg.dll")]
[return: MarshalAs(UnmanagedType.R8)]
private static extern double solveQP(
[In, MarshalAs(UnmanagedType.I4)] int n,
[In, MarshalAs(UnmanagedType.I4)] int mE,
[In, MarshalAs(UnmanagedType.I4)] int mI,
[In, MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.R8)] double[] p_G,
[In, MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.R8)] double[] p_g0,
[In, MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.R8)] double[] p_CE,
[In, MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.R8)] double[] p_ce0,
[In, MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.R8)] double[] p_CI,
[In, MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.R8)] double[] p_ci0,
[In, MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.R8)] double[] p_x);
Я также пробовал это с помощью опции UnmanagedType.LPArray и вообще ничего. Я полагаю, что есть одна деталь о PInvoke, которую я просто не получаю, и я был бы признателен, если бы кто-то указал на это.