从接触sdk开发,到现在已经有3年多了,趁着这个时候总结一波在windows开发动态库(dll)时容易碰到的问题,做个笔记。有错误欢迎指出。
1.dll入口做资源初始化和去初始化不容易管理。建议专门对外提供初始化接口和去初始化的接口。
在这边如果有做操作,注意case 条件 操作完成后,要及时break。
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
{
//尽量不要在入口处做资源初始化和释放,容易出现不容易发现的问题。比如,线程释放时会发生阻塞,导致程序挂掉。
//有需要的,可以对外提供专门的初始化接口和去初始化的接口
//initResources();
break;
}
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
{
//FreeResources();
break;
}
}
return TRUE;
}
2.提供一个常用的接口导入导出的头文件模板
微软 visual studio 工具 ,宏定义TEST_EXPORTS与工程有关(TEST工程名,编译工具自行生成的编译头)。
#ifndef _TEST_H
#define _TEST_H
#ifdef TEST_EXPORTS
#define TESTAPI