奇怪的#include问题

时间:2008-10-31 14:33:20

标签: c++ dll include vc6

我的简单包含文件存在问题。

包含的文件位于两个MFC程序中 - 其中一个是dll,它还将自身编译为非mfc dll。

最近,当我想要访问较大dll未公开的原始代码的某些功能时,我正在使用包围较小dll的 source 的较大dll。 / p>

由于这是一个测试,我只是将源添加到我的项目中并调用了函数。我收到此错误:语法错误:错过')'之前';'

文件被正确包含,我在源文件夹中有.cpp和.h,在项目中但它不会编译。

我最终创建了一个非常小的测试项目,main.cpp,spooler.cpp和spooler.h(假脱机程序是comms的一个包装器)并试图编译它。同样的问题。

所以我撕掉了所有dll相关的东西,以防万一有一个奇怪的问题继续发生,它仍然无法编译。

我无法想到我的生活有什么不对。还有其他人有什么想法吗?

P.S。杰夫你真的需要添加附加文件的能力,因为源会填满太多的数据屏幕。

7 个答案:

答案 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或类似的东西替换变量名。讨厌。

通过前处理程序运行代码是我如何发现正在发生的事情。