Есть набор функций на fasm'e, эти функции необходимо заюзать в проекте на C. Но проблема в том, что эти функции юзают API в своей работе, а вызываются они макросом invoke. Чтоб было понятнее что мне нужно, приведу рабочие тестовые коды. Код (Text): format MS COFF include '%include%\win32ax.inc' public test_proc as '_test_proc@4' extrn '_MessageBoxA@16' as MessageBoxA section '.text' code readable executable proc test_proc, text push 0 push [text] push [text] push 0 call MessageBoxA ret endp Этот асмокод компилирую, затем получившийся obj линкую (или что делаю?) в lib. ( link -lib ctest.obj ). Созданный ctest.lib несу в студийный проект и компилирую. Код (Text): #include <windows.h> #pragma comment( lib, "ctest" ) #pragma comment( linker, "/ENTRY:WinMain" ) extern __stdcall test_proc( char *text ); int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd ) { test_proc( "msg" ); return 0; } Все прекрасно работает, но MessageBox вызывается через переходник jmp dword[xxx]. Мммм... не знаю даже как дальше выразиться то.... Как сделать так, чтобы апи корректно вызывались инструкциями call dword[xxxx]? P.S. Вижу только единственный выход - переопределить макрос invoke в аналог stdcall'а.
Блин, сорри. Стоило только спросить, как сразу решил проблему Код (Text): format MS COFF include '%include%\win32ax.inc' public test_proc as '_test_proc@4' extrn '__imp__MessageBoxA@16' as MessageBoxA:DWORD section '.text' code readable executable proc test_proc, text invoke MessageBoxA, 0, [text], [text], 0 ret endp