GSerg писал(а):stdcall aka PASCAL
даже открыл проект dll в VS 2003 .NET и специально посмотрел, каким образом трактуется PASCAL. VS однозначно ответила: #define PASCAL __stdcall
Для начала обратите внимание, что все мои функции используют директиву PASCAL(устаревшая директива), а не __stdcalll(это сделано потому, что компиляторы частот изменяют имена экспортируемых функций), но Сергей этого не заметил.
Сергей это заметил. Более того, Сергей даже открыл проект dll в VS 2003 .NET и специально посмотрел, каким образом трактуется PASCAL. VS однозначно ответила: #define PASCAL __stdcall После этого Сергей немного дизассемблировал эту библиотеку, и, бегло пробежавшись по командам вида mov eax, [esp+0x04], убедился, что параметры передаются по соглашению stdcall. Потому что первый параметр функции (это который "что вызываем", ну который ещё сравнивается с 0, 1 и 2...) там имел вид как раз [esp+0x04], значит, он был первым; значит, это stdcall... Ладно, хватит доказательств - уверен, что вам хватило и первого #define
Pascal does not support functions with a variable number of parameters, so it can use the callee-clean convention. Parameters are pushed from left to right, because, well, it seemed the natural thing to do. Function name decoration consists of conversion to uppercase. This is necessary because Pascal is not a case-sensitive language.
Register/Pascal:
These conventions pass parameters (of procedure/function) from left to right. The leftmost parameter is evaluated and passed first and the rightmost parameter is evaluated and passed last.
Cdecl/stdcall/safecall:
These conventions pass parameters from right to left. The rightmost parameter is evaluated and passed first and the leftmost parameter is evaluated and passed last.
Ок, об этой разнице я действительно не зналGSerg писал(а):Ага, pascal и PASCAL вещи разные
The __pascal, __fortran, and __syscall calling conventions are no longer supported. You can emulate their functionality by using one of the supported calling conventions and appropriate linker options.
WINDOWS.H now supports the WINAPI macro, which translates to the appropriate calling convention for the target. Use WINAPI where you previously used PASCAL or __far __pascal.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 33