DLL中的全局指针

时间:2012-03-01 16:16:51

标签: c++ windows pointers dll global-variables

我有一个C ++ DLL项目,它包含一个dllmain源文件,一个只包含DLL函数声明的头文件,一个包含完整函数定义的cpp文件,以及一个指向不同类实例的全局指针。通过调用Init函数初始化此指针,并且所有其余DLL函数都使用指针并返回错误(如果尚未分配)。

除了依赖用户在完成DLL时调用特定函数(这听起来像一个可怕的想法),我如何确保cpp文件中的全局指针被解除分配?

感谢。

2 个答案:

答案 0 :(得分:2)

  

除了依赖用户在完成DLL时调用特定功能(这听起来像一个可怕的想法)

考虑到您已经拥有Init功能,具有匹配的Free功能是有道理的。

当用户完成图书馆时,你怎么知道?您可以等到卸载DLL(请参阅DllMain),但到那时该过程可能仍在结束。

我认为最好的解决方案是完全避免使用全局指针。创建一个包含其他类的实例和方法的类,让用户自己创建一个实例(构造函数替换Init,析构函数替换Free)。

答案 1 :(得分:0)

当关闭DLL时,将调用DllMain,参数为DLL_PROCESS_DETACH;你可以放置代码来释放你的全局。