Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在库加载时将预处理器定义传递给DLL_C++_Windows_Winapi_Dll - Fatal编程技术网

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

C++ 如何在库加载时将预处理器定义传递给DLL,c++,windows,winapi,dll,C++,Windows,Winapi,Dll,我正在开发一个与DLL链接的应用程序,该DLL本身包含一个数据结构,其定义因预处理器定义而异: struct Example { uint8_t StringA[32]; #if USE_B uint8_t StringB[32]; #endif }; 在我的应用程序中,我需要在不同的时间使用两个版本的结构。因此,我似乎需要使用LoadLibrary加载DLL,部分执行中未定义USE_B(这是标准且简单的),使用freebrary卸载它,然后使用定义为非零值的U

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

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

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

LoadLibrary/FreeLibrary是运行时概念,而#if是编译时概念。如果编译模块时没有定义#If,则无论如何加载或重新加载它,它都将保持原样

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


然后向类中添加一个虚拟函数,使其具有多态性,并在运行时通过使用
dynamic\u cast

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

将代码更改为具有两个版本的结构