Tôi đã cố gắng để xuất khẩu một chức năng kiểm tra đơn giản cho một dll để làm việc với một ứng dụng (FYI: mIRC) mà xác định quy ước gọi như:tên stdcall mangling sử dụng extern c và dllexport vs định nghĩa mô-đun (MSVC++)
int __stdcall test_func(HWND mWnd, HWND aWnd, char *data, char *parms, BOOL show, BOOL nopause)
Bây giờ, để gọi điều này từ ứng dụng, tôi muốn sử dụng test_func nhưng tôi đã nhận thấy do mangling tên nó không đơn giản như tôi nghĩ.
Qua chủ đề tương tự ở đây tôi đã đi đến sự hiểu biết rằng việc sử dụng extern "C" kết hợp với __declspec (dllexport) là một phương pháp (hơi) loại bỏ mangling đến module định nghĩa (.def) equivelant. Tuy nhiên, khi sử dụng phương thức extern/dllexport, chức năng của tôi (ví dụ) luôn là số _test_func @ số trong khi .def đã xóa tất cả các xâu chuỗi theo yêu cầu để sử dụng với ứng dụng tôi cần để xuất sang.
Có thể ai đó vui lòng giải thích lý do vì sao đây là? Tôi chỉ tò mò về hai phương pháp. Cảm ơn!
chức năng api của Windows là stdcall nhưng không có @number và trên Windows, đây là cách thực hành tiêu chuẩn để thực hiện theo cách này. –