Próbowałem eksportować prostą funkcję testową dla dll do pracy z aplikacją (FYI: mIRC), który określa konwencja wywołania jak:stdcall nazwa przekręcona użyciu extern C i dllexport vs definicji moduł (msvC++)
int __stdcall test_func(HWND mWnd, HWND aWnd, char *data, char *parms, BOOL show, BOOL nopause)
Teraz, aby wywołać to z aplikacji, użyłbym test_func, ale zauważyłem, że z powodu manglingu nazwa nie jest tak prosta, jak myślałem.
Poprzez podobnych tematów tutaj doszedłem do zrozumienia, że za pomocą extern „C” w połączeniu z __declspec (dllexport) stanowi equivelant (nieco) Sposób usuwania maglowania do modułu definicji (.def). Jednakże, używając metody extern/dllexport, moja funkcja (jako przykład) jest zawsze _test_func @ numbers, podczas gdy .def usunął wszystkie manipulacje wymagane do użycia z aplikacją, do której musiałem eksportować.
Czy ktoś mógłby wyjaśnić, dlaczego tak jest? Ciekawi mnie tylko te dwie metody. Dzięki!
Funkcje windows api są stdcall, ale nie mają @ numer i na Windowsie jest to standardowa praktyka, aby zrobić to w ten sposób. –