c++中导出的def文件要怎么修改

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++中导出的def文件要怎么修改相关的知识,希望对你有一定的参考价值。

参考技术A 修改的目的是什么?

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

【中文标题】在 DLL 中导出的 C++ 函数中使用 #ifdef 块【英文标题】:using #ifdef block inside exported C++ function in DLL 【发布时间】:2014-10-01 23:24:51 【问题描述】:

我正在尝试在导出到 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 目标文件。我认为应该是这样,但我觉得我应该能够做到这一点......

【问题讨论】:

【参考方案1】:

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

【讨论】:

k,这就是我的想法。谢谢【参考方案2】:

是的,它们被预编译到 DLL 的代码中。 EXE 无法更改它们。要执行您正在尝试的操作,您必须:

    向函数传递一个额外的参数:

    void API func(bool param)
    
        if (param)
            cout << "I want this" << endl;      
        else
            cout << "I dont want this" << endl;
    
    

    导出两个单独的函数:

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

【讨论】:

是的,我的问题旨在减少不必要的依赖。例如,如果我有一个 Win32 应用程序类,还有一个 SDL 应用程序类,如果我什至不想与 SDL 链接怎么办?我想我已经有了新的答案:在没有 SDL 的情况下编译我的库以使其不依赖它。 如何编译两个独立的 DLL,一个用于 Win32,一个用于 SDL,并让应用程序选择使用哪一个?如果您希望它们共享一个公共代码库,则可以在编译 DLL 时使用您的#ifdefs。 真的,我能做到。我可能真的会走那条路。谢谢

以上是关于c++中导出的def文件要怎么修改的主要内容,如果未能解决你的问题,请参考以下文章

icCube - 如何修改将在 Excel 文件中导出的信息

怎么在pycharm中导入文件夹?

PB中导出EXCEL怎么办?

向phpmyadmin中导入sql文件出现乱码怎样解决啊

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

使用 def 文件从可执行文件中导出函数