Как я могу создать экземпляр класса в dll C ++, чтобы он поддерживал память между вызовами функций? - PullRequest
1 голос
/ 15 декабря 2011

Я пытаюсь написать 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 Ответ

1 голос
/ 15 декабря 2011

Вы можете экспортировать весь класс (и при желании использовать идиому 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...