c++ - 如何在 C++ dll 中实例化一个类,以便它在函数调用之间维护内存?

标签 c++ dll

我正在尝试编写一个 dll 来存储在两次调用之间传递给它的一些值。

目前,我有:

MyDll.h:

namespace MyDllNamespace
{
    class MyClass
    {
    public:
        static int getValue(int &a);
    };
}

MyDll.cpp:

#include "ALERTDataAnalysisLibrary.h"
#include <stdexcept>
using namespace std;

namespace MyDllNamespace
{
    int storedValue=0;
    int MyClass::getValue(int &a)
    {
        a=a+storedValue;
    }

}

MyDll.def

LIBRARY MyDllLibrary
EXPORTS
    getValue @1

这个想法是,第一次调用时,它返回传递的值,第二次调用时,它返回传递值与先前传递值的总和。 (这有点缩减,最终版本将不得不处理数组,并且有更多的值,但一次一个步骤!)

我想我想做的是停止 getValue 是静态的。这意味着在 DLL 中实例化一个类(可能是在加载时),并在其中存储数据。然后公开该类的一个函数。我不知道这是否是这样做的方法,经过大量搜索后我没有找到类似的东西。

最佳答案

您可以导出整个类(并可选择使用 pimpl 习惯用法,但这不是强制性的):

在您的 DLL 头文件“MyDll.h”中,写入以下内容:

#ifdef MYDLL_EXPORTS
#define MYDLL_API __declspec(dllexport)
#else
#define MYDLL_API __declspec(dllimport)
#endif

class MYDLL_API MyClass
{
...
};

然后,确保 MYDLL_EXPORTS 仅在您的 DLL 项目中定义,这样当您编译 DLL 时,您的类是“dllexported”,而当包含在您的主应用程序中时,它是“dllimported”。

此外,您将不再需要 .def 文件。

关于c++ - 如何在 C++ dll 中实例化一个类,以便它在函数调用之间维护内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8523380/

相关文章:

c++ - cv::Mat 类是否存在设计缺陷?

c# - 检测应用程序的启动

c++ - 我可以在不使用全局变量的情况下将信息传递给函数指针回调吗?

c++ - 关于在 C++ 中构建和使用静态库的引用

unity-game-engine - Windows.Devices.Bluetooth.dll

c++ - 将矩阵写入文件

c++ - 函数声明后的 "->"是什么?

python - 如何使用正确的 dll 文件在 Cython C 扩展中启用第 3 方 C 库?

c++ - 让一个程序只与目录中的某些dll一起运行

python - 面临导入错误: DLL load failed while implementing Microsoft azure iothub_service_client