调用dll的时,在dll内部申请的内存,如何自动回收内存
我现在写dll程序的时候一般都是包括申请,运行,释放内存这三个函数。不过我看有人就一个dll,说在dll内部就实现了管理内存释放(申请我知道),不用手动调用释放函数,请问...
我现在写dll程序的时候一般都是包括申请,运行,释放内存这三个函数。不过我看有人就一个dll,说在dll内部就实现了管理内存释放(申请我知道),不用手动调用释放函数,请问这个是如何实现的?
展开
1个回答
展开全部
每个DLL在加载和释放都会调用DLLMAIN函数。
如下面代码所示加入申请和释放代码,就不需要你手动调用申请释放函数,系统会自动调用这两个函数。
////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
if( ul_reason_for_call == DLL_PROCESS_ATTACH )
{
return fnDLL_PROCESS_ATTACH();
}
if( ul_reason_for_call == DLL_PROCESS_DETACH )
{
return fnDLL_PROCESS_DETACH();
}
return TRUE;
}
#endif
int fnDLL_PROCESS_ATTACH()
{
// 加入申请内存代码
return TRUE;
}
int fnDLL_PROCESS_DETACH()
{
// 加入释放内存代码
return TRUE;
}
如下面代码所示加入申请和释放代码,就不需要你手动调用申请释放函数,系统会自动调用这两个函数。
////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
if( ul_reason_for_call == DLL_PROCESS_ATTACH )
{
return fnDLL_PROCESS_ATTACH();
}
if( ul_reason_for_call == DLL_PROCESS_DETACH )
{
return fnDLL_PROCESS_DETACH();
}
return TRUE;
}
#endif
int fnDLL_PROCESS_ATTACH()
{
// 加入申请内存代码
return TRUE;
}
int fnDLL_PROCESS_DETACH()
{
// 加入释放内存代码
return TRUE;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询