p / вызвать несбалансированную ошибку стека - PullRequest
0 голосов
/ 02 декабря 2011

У меня есть следующая функция C ++ и C # p / invkeration decleration:

//C#
[DllImport("capture.dll", EntryPoint = "setup")]
public static extern void captureSetup(int rr);

//C++
extern "C" {
    __declspec(dllexport) void setup(int rr)

Но я получаю сообщение об ошибке несбалансированного стека p / invoke, вероятно, вызванную тем, что управляемая подпись не соответствует неуправляемой подписи.

Кто-нибудь может увидеть, что с этим не так?

1 Ответ

6 голосов
/ 02 декабря 2011

Это несоответствие соглашения о вызовах. Код C ++ использует cdecl по умолчанию, но C # предполагает stdcall. Вы должны сделать так, чтобы они совпадали, например

[DllImport("capture.dll", EntryPoint = "setup", 
    CallingConvention = CallingConvention.Cdecl)]
public static extern void captureSetup(int rr);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...