C++ 如何在库加载时将预处理器定义传递给DLL
我正在开发一个与DLL链接的应用程序,该DLL本身包含一个数据结构,其定义因预处理器定义而异:C++ 如何在库加载时将预处理器定义传递给DLL,c++,windows,winapi,dll,C++,Windows,Winapi,Dll,我正在开发一个与DLL链接的应用程序,该DLL本身包含一个数据结构,其定义因预处理器定义而异: struct Example { uint8_t StringA[32]; #if USE_B uint8_t StringB[32]; #endif }; 在我的应用程序中,我需要在不同的时间使用两个版本的结构。因此,我似乎需要使用LoadLibrary加载DLL,部分执行中未定义USE_B(这是标准且简单的),使用freebrary卸载它,然后使用定义为非零值的U
struct Example
{
uint8_t StringA[32];
#if USE_B
uint8_t StringB[32];
#endif
};
在我的应用程序中,我需要在不同的时间使用两个版本的结构。因此,我似乎需要使用
LoadLibrary
加载DLL,部分执行中未定义USE_B(这是标准且简单的),使用freebrary
卸载它,然后使用定义为非零值的USE_B再次加载它。我不知道如何做到这一点,并将感谢任何帮助。LoadLibrary/FreeLibrary是运行时概念,而#if是编译时概念。如果编译模块时没有定义#If,则无论如何加载或重新加载它,它都将保持原样
定义两个类,一个使用StringA
,另一个使用StringB
继承
然后向类中添加一个虚拟函数,使其具有多态性,并在运行时通过使用
dynamic\u cast
决定要编译两个具有不同标志值的DLL版本。然后,通过动态加载所需的版本,您可以从二进制文件中使用它们。将代码更改为具有两个版本的结构