我正在开发一个链接DLL的应用程序,该DLL本身包含一个数据结构,其定义因预处理器定义而异:
struct Example
{
uint8_t StringA[32];
#if USE_B
uint8_t StringB[32];
#endif
};
我需要在我的应用程序中的不同时间使用该结构的两个版本。因此,似乎我需要使用LoadLibrary
加载DLL,并且USE_B未定义用于部分执行(这是标准且简单的),使用FreeLibrary
卸载它,然后使用定义为非零值的USE_B再次加载它。我不确定如何做到这一点,并希望得到任何帮助。
LoadLibrary / FreeLibrary是运行时概念,#ifs是编译时概念。如果您编译的模块没有定义#if,无论您如何加载或重新加载它,它都将保持不变。
定义两个类,一个使用StringA
,另一个使用StringB
继承。
然后在类中添加一个虚函数,使其成为多态的,并在运行时使用dynamic_cast<>
决定你想要哪两个。
您需要使用不同的标志值编译两个版本的DLL。然后,您可以通过动态加载所需的版本从二进制文件中使用它们。