如何在 C++ 中使用时释放 GetProcAddress() 中分配的资源?

How to release the resource allocated in GetProcAddress() while being used in C++?

提问人:Raj 提问时间:6/3/2019 更新时间:6/5/2019 访问量:439

问:

我正在将 C++ DLL 动态加载到用 C++ 编写的 exe 中。

我的要求是

1) 使用 LoadLibrary() 动态加载 DLL

2)多次调用GetProcAddress以分配相同的函数指针,因为在DLL中调用的函数具有相同的签名。

3) 那么,在调用第二个函数 (Function_2) 之前,我是否必须在代码中释放 lpfn 函数指针的任何资源?

//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
         {

         }        
     }  
}
内存管理 资源 getprocaddress

评论


答:

1赞 Joker007 6/5/2019 #1

哼?该函数返回一个整数/地址。如果你在循环中重用变量 lpfn,那么你的变量值就会被覆盖。

当您不再需要字符串(函数名称)时,您可能更愿意考虑释放它们。

此地址不像堆中需要特殊释放的块。