我的简单包含文件存在问题。
包含的文件位于两个MFC程序中 - 其中一个是dll,它还将自身编译为非mfc dll。
最近,当我想要访问较大dll未公开的原始代码的某些功能时,我正在使用包围较小dll的 source 的较大dll。 / p>
由于这是一个测试,我只是将源添加到我的项目中并调用了函数。我收到此错误:语法错误:错过')'之前';'
文件被正确包含,我在源文件夹中有.cpp和.h,在项目中但它不会编译。
我最终创建了一个非常小的测试项目,main.cpp,spooler.cpp和spooler.h(假脱机程序是comms的一个包装器)并试图编译它。同样的问题。
所以我撕掉了所有dll相关的东西,以防万一有一个奇怪的问题继续发生,它仍然无法编译。
我无法想到我的生活有什么不对。还有其他人有什么想法吗?
P.S。杰夫你真的需要添加附加文件的能力,因为源会填满太多的数据屏幕。
答案 0 :(得分:9)
使用/ P选项构建,这将创建一个预处理文件(通常扩展名为.i)。
在Visual Studio中,该选项将位于项目的属性下,如下所示:
C/C++ - Preprocessor - Generate Preprocessed File
通过它,您可以确切地看到宏的扩展方式。您可能需要通过编译器运行.i文件以查找导致语法错误的确切行。阅读预处理后的文件可能会很痛苦,但它应该显示正在发生的事情。
答案 1 :(得分:2)
这与您包含文件的方式没有任何关系,这是因为您未正确嵌套(
和)
而导致的语法错误。
答案 2 :(得分:2)
如果没有来源,很难确切地知道发生了什么。从问题的第一部分看,这个特定代码似乎在首次使用它的项目中正确编译,但是当你在第二个项目中包含它时,它就不再编译了。如果是这种情况,您想要查看在此之前包含的其他标头。有时候,如果你的函数或变量名与另一个头中定义的东西相同,尤其是windows.h,那么你可以从以前编译过的代码中获得错误。
如果此代码从未正确编译,那么其他答案建议您检查打开/关闭“(”可能是开始的地方。
答案 3 :(得分:1)
您的编译器应该告诉您错误在哪一行。尝试在该行结束之前搜索前一个“(”。
答案 4 :(得分:1)
你需要找出扩展到的东西。特别是什么是ID_SPOOLER_EVENT?如果它有不平衡的括号,那就是你的罪魁祸首。如果没有,那么,请听听Mike B的建议。这看起来像是一个预处理器问题。
答案 5 :(得分:0)
正在使用的代码:
// the only two includes
#include <windows.h>
#include "spooler.h"
// in WinMain
// create window then...
ShowWindow (hwnd, iCmdShow);
UpdateWindow (hwnd);
SpoolerInitiallize( hwnd, ID_SPOOLER_EVENT ); // <-- our function
...
是的,我知道它拼写错误,并且整个文档中的初始化拼写错误。不幸的是它无法更改,因为我们也将这个dll提供给第三方。
答案 6 :(得分:0)
尝试Mike B对预处理器说的内容。
这个建议提醒我为什么这个错误看起来如此熟悉。对我来说,这是一个非常短的#define
,用文字int或类似的东西替换变量名。讨厌。
通过前处理程序运行代码是我如何发现正在发生的事情。