我有一个用C ++编写的DLL,供我们的客户使用 - 他们的应用程序中的第三方开发人员。 DLL有一些设施通过winsock连接到我们公司的服务器,并与特定协议上的服务器通信。
突出的任务是在应用程序关闭时向活动服务器发送一种告别消息。但是我知道的关于事件(应用程序关闭)的唯一方法是DllMain / DLL_PROCESS_DETACH案例。我知道不建议这样做,我读了Raymond Chen's article关于这个和MSDN文档,但是我需要一个解决方案而不是注意事项。
当然我尝试从DllMain发送消息,但似乎那时winsock库已经分离,因为我收到的是WSANOTINITIALISED(10093)错误。
此外,我尝试创建如下的静态终结器:
struct Finalization
{
~Finalization() {
// sending the message
}
};
static Finalization f;
也没有成功。
我觉得我需要的东西有点像一个触发点,当过程即将终止时。可以忽略同时使用库的情况,因为它的具体内容完全没有意义。
我在想的是该库捆绑了一个接口头,它将包含在客户的应用程序中。我可以使用这个事实在文件中放置一些东西,一个互斥体或类似的东西。
也许值得一提的是,该库的先前版本是用Delphi编写的,并且分离消息是从一个最终部分发送的,它完美地工作,也许只是偶然。
提前感谢您的想法。
答案 0 :(得分:0)
添加到初始化和最终化DLL的DLL函数。使它成为DLL的所有使用者调用这些函数。在finalize函数中,您可以执行任何您想要执行的操作。
正如您所发现的,将它留给DllMain并不好。你无法摆脱这种情况。 DllMain只是尝试套接字逗号的错误位置。