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

问题描述 投票:1回答:2

我正在开发一个链接DLL的应用程序,该DLL本身包含一个数据结构,其定义因预处理器定义而异:

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

我需要在我的应用程序中的不同时间使用该结构的两个版本。因此,似乎我需要使用LoadLibrary加载DLL,并且USE_B未定义用于部分执行(这是标准且简单的),使用FreeLibrary卸载它,然后使用定义为非零值的USE_B再次加载它。我不确定如何做到这一点,并希望得到任何帮助。

c++ windows winapi dll
2个回答
2
投票

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

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

然后在类中添加一个虚函数,使其成为多态的,并在运行时使用dynamic_cast<>决定你想要哪两个。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.