“ dll_file”可能为“ 0”:这不符合功能“ GetProcAddress”的规范

时间:2019-10-14 21:51:17

标签: c++ dll getprocaddress

所以我想使用我创建的DLL,并且我收到了一个非常奇怪的警告,我没有看到有人拥有这个DLL。我检查了LoadLibray是否返回“ NULL”,情况并非如此。

typedef DATA_BLOB(*encryption_decryption)(DATA_BLOB, bool*);
HINSTANCE dll_file = LoadLibrary(L"dllForEncryptionNDecryptionn.dll");
if (dll_file != NULL) {
    cout << "Library loaded!" << endl;
}
else {
    failed();
}
encryption_decryption encryption = (encryption_decryption)GetProcAddress(dll_file,"encryption");
if(encryption != NULL)
{
    cout << "Workded!" << endl;
}
else
{
    failed();
}
void failed() {
    cout << GetLastError() << endl;
    cout << "Faild!" << endl;
}
  

第8行警告:“'dll_file'可能为'0':这不符合功能'GetProcAddress'的规范。”

一切正常,运行程序时不会显示任何错误消息。

1 个答案:

答案 0 :(得分:1)

如果LoadLibrary中发生任何问题,您可以调用failed()来打印错误代码并返回。

HINSTANCE dll_file = LoadLibrary(L"dllForEncryptionNDecryptionn.dll");
if (dll_file != NULL) {
    cout << "Library loaded!" << endl;
}
else {
    failed(); // returns even when dll_file is NULL
}

// so, here you don't know if it's NULL or a valid handle which is why you get the warning
encryption_decryption encryption = (encryption_decryption)GetProcAddress(dll_file,"encryption");

如果LoadLibrary失败,则表示您不让他们使用dll_file来呼叫GetProcAddress

encryption_decryption encryption = nullptr;
HINSTANCE dll_file = LoadLibrary(L"dllForEncryptionNDecryptionn.dll");

if(dll_file) {
    encryption_decryption encryption = 
        (encryption_decryption)GetProcAddress(dll_file,"encryption");
} else {
    // do NOT call GetProcAddress
}

if(encryption) {
    // function successfully loaded
}