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

时间:2014-10-01 23:24:52

标签: c++ dll visual-studio-2013

我试图在导出到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_THIS 它实际上并不适用于库中链接的cpp对象文件。我认为这应该是这样,但我觉得我应该能够做到这一点......

2 个答案:

答案 0 :(得分:1)

您需要在运行时期间切换此类功能。 DLL是已编译的代码,任何类似的预处理在构建时都已执行。

答案 1 :(得分:0)

是的,它们已预编译到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;      
    }