gpt4 book ai didi

c++ - 如何在应用程序关闭时通过套接字从 DLL 发送消息?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:55:59 26 4
gpt4 key购买 nike

我有一个用 C++ 编写的 DLL 供我们的客户使用 - 第三方开发人员在他们的应用程序中使用。该 DLL 具有一些功能,可以通过 winsock 连接到我们公司的服务器,并根据特定协议(protocol)与服务器进行通信。

未完成的任务是在应用程序关闭时向事件服务器发送一种告别消息。但我知道的了解事件(应用程序关闭)的唯一方法是 DllMain/DLL_PROCESS_DETACH 案例。我知道不推荐,我看了Raymond Chen's article关于这个和 MSDN 文档,但我需要一个解决方案而不是警告。

当然,我尝试从 DllMain 发送消息,但似乎在那一刻 winsock 库已经分离,因为我收到的是 WSANOTINITIALISED (10093) 错误。

我还尝试创建一个如下所示的静态终结器:

struct Finalization
{
~Finalization() {
// sending the message
}
};

static Finalization f;

也没有成功。

我觉得我需要的有点像触发点,知道进程何时终止。可以忽略同时使用该库的情况,因为它的特殊性在这方面完全没有意义。

我在想的是,该库与接口(interface) header 捆绑在一起,将包含在客户的应用程序中。我可以使用这个事实在文件中放置一些东西,一个互斥量或类似的东西。

也许值得一提的是,该库的先前版本是用 Delphi 编写的,离别消息是从一个完成部分发送的,它运行完美,也许只是偶然。

预先感谢您的想法。

最佳答案

将初始化和完成 DLL 的函数添加到 DLL 中。使 DLL 的所有使用者都能调用这些函数。在 finalize 函数中,您可以做任何您想做的事情。

正如您所发现的,将其留给 DllMain 并不好。你无法逃避这一点。 DllMain 只是尝试套接字逗号的错误位置。

关于c++ - 如何在应用程序关闭时通过套接字从 DLL 发送消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18975366/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com