我正在开发一个链接到 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<>
决定您想要这两个函数中的哪一个| .
关于c++ - 如何在库加载时将预处理器定义传递给 DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55624787/