[закрыто] MSVC: как определить calling conventions?
Q: Как определить calling conventions?
A: Дизассемблировать либу и посмотреть глазами, как параметры в функции передаются.
Только ты, видимо, кое-что другое хотел спросить. Типа "как мне вызвать библиотечные функции с незаманглинными именами из MSVC?" или что-то в этом роде.
а ты уже убедился, что abi у этой либы (порядок передачи аргументов на стеке/регистрах (каких?), кто подчищает стек, какие регистры сохраняет вызванная функция) совместим с одним из msvc'шных?
1) extern "C"
2) x64
что-нибудь из гугла : http://stackoverflow.com/questions/2804893/c-dll-export-deco...
более того, собрано микрософтовским же тулчейном
extern "C" - это применимо только для c++, здесь же везде С.
Ларчик открывался так:
либа было собрана при помощи wdk, функции cdecl
я не вижу, как можно преодолеть проблему.
либу пересобрали вижуалстудей, появились префиксы _
в таком виде и будем использовать
либа не моя.
Оставить комментарий
yolki
есть либа (.lib), в которой функции без декораций: func1 func2 etcлинкер хочет _func1 _func2 - это __cdecl
если ему сказать __stdcall, то он хочет 8 16
__fastcall: @8 @16 соответственно
язык везде С.