如何在库加载时将预处理器定义传递给DLL

时间:2019-04-11 04:36:05

标签: c++ windows winapi dll

我正在开发一个与DLL链接的应用程序,该DLL本身包含一个数据结构,该数据结构的定义取决于预处理程序的定义:

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

我需要在应用程序中的不同时间使用两个版本的结构。因此,似乎我需要使用LoadLibrary加载DLL,并且在执行的一部分中未定义USE_B(这是标准而直接的),然后使用FreeLibrary卸载它,然后再次使用USE_B加载它。定义为非零值。我不确定如何执行此操作,将不胜感激。

2 个答案:

答案 0 :(得分:2)

LoadLibrary / FreeLibrary是运行时概念,而#ifs是编译时概念。如果编译未定义#if的模块,则无论您如何加载或重新加载它,它都将保持不变。

定义两个类,一个带有StringA,另一个也使用StringB继承。

然后将虚拟函数添加到类中,使其变为多态,并在运行时中确定要使用dynamic_cast<>的两个函数。

答案 1 :(得分:0)

您需要使用不同的标志值编译DLL的两个版本。然后,您可以通过动态加载所需的版本来从二进制文件中使用它们。