Как я могу передать определение препроцессора в DLL во время загрузки библиотеки - PullRequest
1 голос
/ 11 апреля 2019

Я работаю над приложением, которое связывается с DLL, которая сама содержит структуру данных, определение которой варьируется в зависимости от определения препроцессора:

struct Example
{
    uint8_t StringA[32];
    #if USE_B
    uint8_t StringB[32];
    #endif
};

Мне нужно использовать обе версии структуры в разное время в моем приложении. Следовательно, мне кажется, что мне нужно загрузить DLL, используя LoadLibrary с USE_B undefined для части выполнения (это стандартно и просто), выгрузить ее, используя FreeLibrary, а затем загрузить ее снова с USE_B, определенным с ненулевым значением значение. Я не уверен, как это сделать, и буду признателен за любую помощь.

Ответы [ 2 ]

2 голосов
/ 11 апреля 2019

LoadLibrary / FreeLibrary - концепции времени выполнения, а #ifs - концепции времени компиляции. Если вы скомпилируете модуль без определенного #if, он останется таковым независимо от того, как вы его загрузите или перезагрузите.

Определите два класса, один с StringA и один унаследованный, используя также StringB.

Затем добавьте виртуальную функцию в класс, чтобы сделать ее полиморфной, и в время выполнения решите, какую из двух вы хотите использовать, используя dynamic_cast<>.

0 голосов
/ 11 апреля 2019

Вам необходимо скомпилировать две версии DLL с разными значениями флага.Затем вы можете использовать их из двоичного файла, загружая нужную вам версию динамически.

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