c++ - 带参数的 MSVC 2010 项目范围的宏

标签 c++ visual-c++

我正在尝试为包含的代码创建一个 Visual Studio 项目

DL_EXPORT(void) initlua(void);

所以我基本上需要一个像这样的宏

#define DL_EXPORT(retVal) __declspec(dllexport) retVal

哪个有效,但是特定于操作系统/编译器,所以我想把它放在项目中*。但是我不知道要在 Properties -> C/C++ -> Preprocessor -> Preprocessor Definitions(或在命令行中)中放入什么来做到这一点。我认为这些中的任何一个都行得通:

DL_EXPORT(retVal) __declspec(dllexport) retVal
DL_EXPORT(retVal)=__declspec(dllexport) retVal

我倾向于后者,但似乎都不起作用 - 编译时出现以下错误:

error C2061: syntax error : identifier 'initlua'
error C2059: syntax error : ';'
error C2059: syntax error : 'type'

使用/P 编译以获得预处理器结果解释了原因:什么都没发生,因此编译器将其解释为 int DL_EXPORT(void) 并期望 ;

定义的正确语法是什么?或者没有,因为人们在this question假设?

谢谢。

* 我没有对 MSVC 使用简单的#ifdef-check,因为我只是想使用我不想破坏的现有构建脚本为现有库(lunatic python)创建一个 Visual Studio 项目。虽然我确实可以使用 #ifndef DL_EXPORT - 但我仍然想知道我是否遗漏了什么或者这在 Visual Studio 中是不可能做到的。

最佳答案

我认为应该可以使用 /FI在命令行上指定一个包含文件以自动包含在每个源文件中。在该文件中,您可以放入所需的 #define 语句。

关于c++ - 带参数的 MSVC 2010 项目范围的宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13496068/

相关文章:

c++ - 将来是否会支持非平凡的指定初始值设定项(C++17 后)?

c++ - 带 const 的转换运算符

c++ - 如何获得 std::map 的真正分配器?

c++ - 非命名空间范围内的显式特化在 GCC 中无法编译

Windows VC++ 获取机器型号名称

c++ - 分析编译时间

winapi - 如何在win32窗口中播放H.264视频?

c++ - C++ 是否强制我定义默认构造函数

c++ - 将变量 N​​AME 传递给函数

visual-c++ - 获取蓝牙配对设备