在DLL中导出的C++函数中使用#ifdef块

using #ifdef block inside exported C++ function in DLL

本文关键字:#ifdef 函数 DLL C++      更新时间:2023-10-16

我正试图在导出到DLL 的函数中使用#ifdef开关

我遇到的问题是我的.EXE项目无法更改ifdef定义。这就像它们是预先编译到DLL中的,不能更改。这是正确的吗?我可以不在导出到DLL的C++函数中使用#ifdef吗。

示例:

void API func()
{
   #ifdef I_WANT_THIS
      cout << "I want this" << endl;      
   #else
      cout << "I dont want this" << endl;
   #endif
}

如果我在构建DLL时没有定义任何内容,然后在.EXE项目中尝试定义I_WANT_HIS它实际上并不适用于库中链接的cpp对象文件。我想这是应该的,但我觉得我应该能够做到。。。

您需要使这种功能在运行时可以切换。DLL是经过编译的代码,任何类似的预处理都已在构建时执行。

是的,它们被预编译到DLL的代码中。EXE无法更改它们。要做你正在尝试的事情,你必须:

  1. 将一个额外的参数传递到函数中:

    void API func(bool param)
    {
        if (param)
            cout << "I want this" << endl;      
        else
            cout << "I dont want this" << endl;
    }
    
  2. 导出两个独立的函数:

    void API doThis()
    {
       cout << "I want this" << endl;      
    }
    void API doThat()
    { 
        cout << "I want that" << endl;      
    }