如何在C ++ DLL中实例化一个类,以便在函数调用之间保持内存?

时间:2011-12-15 16:30:33

标签: 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中实例化一个类(可能在它加载时),并在其中存储数据。然后公开该类的函数。我不知道是不是这样做,经过多次搜索后我找不到类似的东西。

1 个答案:

答案 0 :(得分:1)

你可以导出整个类(并且可以选择使用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文件。