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文件要怎么修改的主要内容,如果未能解决你的问题,请参考以下文章