WPF: вызов функции PInvoke разбалансирует стек - PullRequest
0 голосов
/ 19 октября 2011

Я сталкиваюсь с этой ошибкой при использовании одного из методов в моей ссылке .dll. Когда я вызываю метод MyRef.SetDbaseId, я возвращаюсь в VS с этой ошибкой. Я пытался добавить CallingConvention параметры перечисления, но все они не работают для меня. Я также открыл dll в DependencyWalker для проверки точки входа и параметра (ulong), который подходит для моего приложения. Это сбивает с толку, потому что другие методы работают нормально. Есть идеи, как решить эту проблему?

[DllImport("my.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "?setdbaseid@@YGHK@Z")]
public static extern int SetDbaseID(ulong dbase_id);
ulong tmid = ulong.Parse(p_6);
i = MyRef.SetDbaseID(tmid);

1 Ответ

2 голосов
/ 19 октября 2011

Искаженное имя,? Setdbaseid @@ YGHK @ Z, demangles к:

 int __stdcall setdbaseid(unsigned long);

Что делает ваше объявление неверным, длинная длина без знака в собственном коде составляет 32 бита.И соглашение о вызовах неверно.Исправить:

[DllImport("my.dll", EntryPoint = "?setdbaseid@@YGHK@Z"))]
public static extern int SetDbaseID(uint dbase_id);
...