Как освободить ресурс, выделенный в GetProcAddress () при использовании в C ++? - PullRequest
0 голосов
/ 03 июня 2019

Я загружаю C ++ DLL динамически в исполняемый файл, написанный на C ++.

Мое требование:

1) Загрузка DLL динамически с помощью LoadLibrary ()

2)Вызов GetProcAddress более чем несколько раз для назначения того же указателя функции, что и функции, вызываемые в DLL, имеет одну и ту же сигнатуру.

3) Так что мне нужно освободить все ресурсы в моем коде для указателя функции lpfn перед тем, каквторая функция (Function_2) вызывается?

//Function pointer
typedef int (__stdcall *EntryPoint)(int nContext, BYTE *pySeed, int nSeedSize, BYTE *pyKey, int *pnKeySize);

int main()
{
HMODULE hDllHandle = LoadLibrary("SA.dll");  // load dll

    if (hDllHandle)
    {
     EntryPoint lpfn= 0;

         if (lpfn = (EntryPoint)GetProcAddress(hDllHandle, "Function_1"))
         {
                 //call the function using lpfn
         }
         else
         {

         }
         //should I release any resources on lpfn before I call/assign 
         // second function  
         if (lpfn = (EntryPoint)GetProcAddress(hDllHandle, "Function_2"))
         {
                 //call the function using lpfn
         }
         else
         {

         }        
     }  
}

1 Ответ

0 голосов
/ 04 июня 2019

А?Функция возвращает целое число / адрес.Если вы повторно используете вашу переменную lpfn в цикле или около того, тогда значение вашей переменной будет перезаписано.

Вы можете предпочесть освободить строки (имена функций), когда они вам больше не нужны.

Этот адрес не похож на кусок из кучи, который требует особого освобождения.

...