Можно ли (VC6) описать функцию, чтобы компилятор сам определял количество параметров при её вызове и автоматически подсчитывал как ему очистить стек... в в апи это делается, например, так: Код (Text): int __cdecl wsprintfA( __out LPSTR, __in __format_string LPCSTR, ...); но как мне описать свою функцию и узнать сколько параметров передаётся ей при вызове? Вообще конечная цель - написать функцию вызова сервисов. то есть что-то типа: Код (Text): NTSTATUS CallService(ULONG ServiceNumber,IN ...) { __asm{ ... lea edx,... mov eax,ServiceNumber int 0x2E} }
Первое просто, со вторым сложнее, т.к. работа по определению кол-ва параметров и их типов ложится полностью на тебя. В случае *printf за это отвечает строка форматирования, в твоём - знание кол-ва параметров исходя из знания прототипа вызываемого сервиса. Смотри доку по #2, но мне кажется, что есть подход проще - как сделано в самой системе.
Разобрался. вобщем нужно просто определить __cdecl функцию: Код (Text): NTSTATUS __cdecl CallService(ULONG ServiceNumber,...) { __asm{ lea edx,[esp+8] mov eax,ServiceNumber int 0x2E} } компилятор смотрит сколько я положил в стек при вызове и после call ставит add esp,..