如何在应用程序关闭时通过DLL从DLL发送消息?

时间:2013-09-24 07:23:17

标签: c++ delphi sockets dll

我有一个用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编写的,并且分离消息是从一个最终部分发送的,它完美地工作,也许只是偶然。

提前感谢您的想法。

1 个答案:

答案 0 :(得分:0)

添加到初始化和最终化DLL的DLL函数。使它成为DLL的所有使用者调用这些函数。在finalize函数中,您可以执行任何您想要执行的操作。

正如您所发现的,将它留给DllMain并不好。你无法摆脱这种情况。 DllMain只是尝试套接字逗号的错误位置。