0

我对一个简单的包含文件有疑问。

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

最近,当我想访问较大 dll 未公开的原始代码的某些功能时,我使用了较大的 dll,它包裹了较小 dll 的源代码。

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

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

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

因此,我删除了所有与 dll 相关的东西,以防万一出现奇怪的问题并且它仍然无法编译。

我想不出我的生活有什么问题。还有其他人有什么想法吗?

ps Jeff,您确实需要添加附加文件的功能,因为源会用数据填满太多屏幕。

4

7 回答 7

9

使用 /P 选项构建,这将创建一个预处理文件(通常带有 .i 扩展名)。

在 Visual Studio 中,该选项将位于项目的属性上,如下所示:

C/C++  -  Preprocessor  -   Generate Preprocessed File

有了它,您可以准确地看到宏是如何被扩展的。您可能需要通过编译器运行 .i 文件以找到导致语法错误的确切行。阅读后预处理文件可能会很痛苦,但它应该显示正在发生的事情。

于 2008-10-31T15:33:43.600 回答
2

这与您包含文件的方式没有任何关系,这是您得到的语法错误,因为您没有(正确嵌套)

于 2008-10-31T14:38:58.407 回答
2

如果没有来源,很难确定到底发生了什么。从您问题的第一部分来看,这个特定代码似乎在首次使用它的项目中正确编译,但是当您将它包含在第二个项目中时,它不再编译。如果是这种情况,您想查看在此之前包含哪些其他标题。有时,如果您的函数或变量名称与另一个头文件中定义的名称相同,尤其是 windows.h,那么您可能会从之前编译的代码中得到错误。

如果此代码从未正确编译,那么建议您检查打开/关闭“(”的其他答案可能是开始的地方。

于 2008-10-31T14:49:10.697 回答
1

你的编译器应该告诉你错误在哪一行。尝试在该行末尾搜索前一个“(”。

于 2008-10-31T14:41:04.503 回答
1

你需要找出事情扩展到什么。具体来说,什么是 ID_SPOOLER_EVENT?如果它有不平衡的括号,那就是你的罪魁祸首。如果没有,那么,请听从 Mike B 的建议。这对我来说似乎是一个预处理器问题。

于 2008-10-31T15:59:49.663 回答
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 提供给第三方。

于 2008-10-31T15:01:15.197 回答
0

试试Mike B所说的预处理器。

这个建议提醒了我为什么这个错误看起来如此熟悉。#define对我来说,用文字 int 或类似的东西替换变量名是很短的。讨厌。

通过预处理器运行代码是我发现发生了什么的方式。

于 2008-10-31T16:09:52.997 回答