c++ - 如何在库加载时将预处理器定义传递给 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 未定义用于部分执行(这是标准且直接的),使用 FreeLibrary 卸载它,然后然后使用定义为非零值的 USE_B 再次加载它。我不确定如何执行此操作,如有任何帮助,我将不胜感激。

最佳答案

LoadLibrary/FreeLibrary 是运行时概念,#ifs 是编译时概念。如果你编译一个没有定义 #if 的模块,无论你如何加载或重新加载它,它都会保持原样。

定义两个类,一个是StringA一个也继承了 StringB .

然后向该类添加一个虚函数以使其成为多态的,并在运行时通过使用dynamic_cast<> 决定您想要这两个函数中的哪一个| .

关于c++ - 如何在库加载时将预处理器定义传递给 DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55624787/

相关文章:

windows - 无法将 Windows 服务凭据更改为 gsma

python - tensorflow_hub 在 Windows 机器上拉出 BERT 嵌入 - 扩展到 albert

windows - 如何隐藏批处理输出

c++ - 使用 MFC 或 Win32 显示内存缓冲区中的所有位图类型

c++ - GetWindowText() 返回空字符串和奇怪的错误

c++ - WM_NEXTDLGCTL 可以与非对话框窗口一起使用吗?

c++ - webrtc中的CreateVideoSource()的替代方法

c++ - 向 ssl 服务器发送 GET 命令以获取结果

c++ - 在 C++ 中按 "enter"并在整数数组中获取输入时如何中断循环

c++ - 一种存储 C++ CLI 参数的好方法? (不使用库)