gpt4 book ai didi

c++ - 在 C++ dll 中存储状态

转载 作者:行者123 更新时间:2023-11-30 03:14:34 27 4
gpt4 key购买 nike

我对如何在 C++ 中的 dll 中存储状态有疑问。我目前拥有的是这样的:

#ifndef FOO
#define FOO

#ifdef BUILD_DLL
#define DECLSPEC __declspec(dllexport)
#else
#define DECLSPEC __declspec(dllimport)
#endif

namespace FOO
{
extern "C"
{
DECLSPEC bool initialize();
DECLSPEC void addSomething();
DECLSPEC void removeSomething();
DECLSPEC void shutDown();
}
}

#endif // FOO

现在我希望我的 dll 能够具有某种状态。例如,我希望将 addSomething() 添加的内容存储在 dll 内的 std::vector 中,并能够从 removeSomething() 访问相同的 vector 。因为我的 dll 只是导出一组函数,所以我真的没有看到一个干净的方法来做到这一点。目前我想到的唯一提示是 dll 中的全局变量。有比这更好的解决方案吗?我有点想避免使用全局变量,即使它们只在 dll 中也是如此。

最佳答案

您可以选择使用全局变量来存储数据,也可以将句柄传回给调用者(例如,从 initialize())并将数据挂起。然后调用者在调用任何公开的方法时传回这个句柄;例如:

typedef void *MyHandle;

// NULL would be an error
DECLSPEC MyHandle initialize();
DECLSPEC void addSomething(MyHandle handle);
DECLSPEC void destroy(MyHandle handle);

在实现中,您将 MyHandle 转换为不向调用者公开的具体类型。

这允许您的 DLL 在进程中多次使用,并允许您避免使用全局变量。

我发现您对 namespaceextern "C" 的使用很奇怪;我认为您应该坚持使用 C-Linkage 以使您的 DLL 在更多语言中有用。

关于c++ - 在 C++ dll 中存储状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57705910/

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