Tôi đang sử dụng thư viện libeay32.dll/ssleay32.dll trong ứng dụng của mình để hỗ trợ https. Thư viện tải thành công trên Windows 7 (không phải thông qua ứng dụng của tôi, thông qua thư viện Qt), nhưng tôi gặp lỗi SSL trên Windows 10.
Tôi đã viết một ứng dụng nhỏ để đảm bảo rằng phiên bản thư viện chính xác đã được tải (tức là không được tải từ PATH) và nhận được kết quả thú vị.
đây là mã
HMODULE hSsleay = LoadLibrary("ssleay32.dll");
DWORD pathSize = GetModuleFileName(hSsleay, ssleayPath, pathSize);
nếu (pathSize) {
std::cout << "Đường dẫn đã phát hiện mô-đun ssleay32.dll = " << ssleayPath << '\n';
}
khác {
std::cout << "Lỗi phát hiện mô-đun ssleay32.dll LastError = " << GetLastError() << '\n';
}
Đầu ra trên Windows 7 x86 là
Đường dẫn được phát hiện của mô-đun ssleay32.dll = C:/Program Files/My Application/ssleay32.dll
Tuy nhiên, trên Windows 10 x64 thì
Đường dẫn được phát hiện của mô-đun ssleay32.dll = C:/Tệp chương trình (x86)/Ứng dụng của tôi/LibraryLocator.exe
trong đó LibraryLocator.exe là tên của ứng dụng thử nghiệm có chứa đoạn mã trên
GetModuleFileName()
trong nó hMô-đun
Trả về đường dẫn của quá trình gọi khi tham số được đặt thành NULL. TảiThư viện()
Trả về NULL khi thất bại. Rõ ràng là bạn quan tâm đến TảiThư viện()
Cuộc gọi không thành công (ví dụ: nếu EXE 32 bit của bạn cố tải phiên bản 64 bit của DLL hoặc không thể thực hiện được DLL được tìm thấy trong PATH
Bởi vì bạn không chỉ định đường dẫn tuyệt đối). đang gọi điện GetModuleFileName()
Bạn đã không xử lý lỗi trước đó.
Nếu Qt đã tải DLL cho bạn, bạn nên sử dụng GetModuleHandle()
thay vì TảiThư viện()
.
Tôi là một lập trình viên xuất sắc, rất giỏi!