tôi đi qua các đoạn lạ sau code.Imagine bạn có typedef sau:con trỏ hàm và số không rõ các đối số trong C++
typedef int (*MyFunctionPointer)(int param_1, int param_2);
Và sau đó, trong một chức năng, chúng tôi đang cố gắng để chạy một chức năng từ một DLL theo cách sau:
LPCWSTR DllFileName; //Path to the dll stored here
LPCSTR _FunctionName; // (mangled) name of the function I want to test
MyFunctionPointer functionPointer;
HINSTANCE hInstLibrary = LoadLibrary(DllFileName);
FARPROC functionAddress = GetProcAddress(hInstLibrary, _FunctionName);
functionPointer = (MyFunctionPointer) functionAddress;
//The values are arbitrary
int a = 5;
int b = 10;
int result = 0;
result = functionPointer(a, b); //Possible error?
vấn đề là, rằng không có cách nào để biết nếu functon có địa chỉ chúng tôi đã nhận với LoadLibrary mất hai số nguyên arguments.The tên dll được cung cấp bởi người sử dụng tại thời gian chạy, sau đó tên của các hàm đã xuất được liệt kê và người dùng se lects một để kiểm tra (một lần nữa, tại thời gian chạy: S: S). Vì vậy, bằng cách thực hiện cuộc gọi hàm ở dòng cuối cùng, chúng ta có đang mở cánh cửa để ngăn chặn sự tham nhũng có thể không? Tôi biết rằng điều này biên dịch, nhưng những gì sắp xếp của thời gian chạy lỗi sẽ xảy ra trong trường hợp chúng tôi đang đi sai đối số cho chức năng chúng tôi đang chỉ đến?
Nếu bạn không chắc chắn chức năng chính xác nào được xuất bởi dll (loại chính xác, nhưng * không * quy ước gọi), hãy sử dụng Dependency Walker. –