У меня проблема с вызовом P / Invoke, который я пытаюсь сделать. Я должен вызвать класс C ++ из программы на C #. У меня есть источник этого класса, поэтому я поместил его в проект DLL и создал функции экспорта для доступа к его основному методу. Этого должно быть достаточно, чтобы делать то, что мне нужно, и все упростить.
Мой метод экспорта выглядит так:
extern "C" _declspec(dllexport) void Inference(double *c1, double *c2, double *c3, double *result)
{
/* somecode */
}
Это компилируется, и я могу видеть экспорт в dumpbin
выводе.
Теперь проблема в том, что я не могу вызвать этот метод из своего кода C #, потому что я всегда получаю исключение PInvokeStackInbalance
, сообщающее мне, что
Это скорее всего потому, что управляемый
PInvoke подпись не соответствует
неуправляемая целевая подпись.
Я попытался вызвать метод следующим образом:
[DllImport("InferenceEngine.dll")]
extern static unsafe void Inference(double *c1, double *c2, double *c3, double *result);
Я тоже пробовал это:
[DllImport("InferenceEngine.dll")]
extern static void Inference(ref double c1, ref double c2, ref double c3, ref double result);
... оба эти способа были задокументированы в MSDN, но безуспешно. Кто-нибудь знает, в чем проблема?
Спасибо!