我正在尝试编写一个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
{
...
};

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

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

09-30 00:11