我尝试通过在预处理程序指令上修改其宏来以不同方式在visual studio上使用库。但是,#if
指令内的逻辑块显示为非活动状态,因为它是注释。这是代码:
#if defined EBML_DLL
#if defined EBML_DLL_EXPORT
#define EBML_DLL_API __declspec(dllexport)
#else // EBML_DLL_EXPORT
#define EBML_DLL_API __declspec(dllimport)
#endif // EBML_DLL_EXPORT
#else // EBML_DLL
#define EBML_DLL_API
#endif // EBML_DLL
问题在于,如果ebml_dll阻止处于非活动状态(如评论),visual studio会显示代码。因此,dll不会在VS的对象浏览器中显示这些功能。
提示:如果在#if
定义的EBML_DLL行的末尾添加了反斜杠,则它仅激活else块。
答案 0 :(得分:1)
旧版本的VS中存在一个关于此问题的错误,但这只是一个显示问题。 VS没有正确读取定义(在您的情况下是EBML_DLL等)。
也可能是您在预处理程序语句中使用的常量不正确且缺少字符(通常是编译器使用的常量在开头和结尾都有下划线)
为了确切知道它是哪一个,你可以在预处理器需要的分支内添加一个随机字符串,看看代码是否编译。
#if defined EBML_DLL
this_should_not_compile //you should get an error on this line
#endif
希望这会有所帮助......