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