编译旧的c代码

编译旧的c代码,c,windows,legacy-code,C,Windows,Legacy Code,我的任务是让一个旧程序在Vista/Win7下运行。 代码看起来像c代码,但“奇怪” foo.h: int PASCAL WinMain(HANDLE, HANDLE, LPSTR, int); BOOL InitApplication(HANDLE); BOOL InitInstance(HANDLE, int); long CALLBACK __export MainWndProc(HWND, UINT, WPARAM, LPARAM); foo.c: int PASCAL WinMain

我的任务是让一个旧程序在Vista/Win7下运行。
代码看起来像c代码,但“奇怪”

foo.h:

int PASCAL WinMain(HANDLE, HANDLE, LPSTR, int);
BOOL InitApplication(HANDLE);
BOOL InitInstance(HANDLE, int);
long CALLBACK __export MainWndProc(HWND, UINT, WPARAM, LPARAM);
foo.c:

int PASCAL WinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow)
HANDLE hInstance;                /* current instance         */
HANDLE hPrevInstance;            /* previous instance        */
LPSTR lpCmdLine;                 /* command line             */
int nCmdShow;                    /* show-window type (open/icon) */
{
   /* rest of the code follows here */
我对c语言的了解有限,而且这种语法与我见过的任何语法都不一样。 该程序一直在WinXP下运行,但没有在Vista/Win7下运行-我怀疑是16位编译(就是这么旧的…)

该代码附带一个make文件,其中说明:

# Microsoft Visual C++ generated build script - Do not modify
...
但无论是VS2010还是gcc似乎都无法编译此代码(无论如何,不是我尝试的方式…) 使用VS2010,一个空的解决方案(vc++),第一个错误是:

error C2061: Syntaxerror: Identifier: 'MainWndProc' in line 4 of foo.h
error C2059: Syntaxerror: ';' in line 4 of foo.h
error C2059: Syntaxerror: 'Type' in line 4 of foo.h

有没有一种简单的方法可以在Win7/64位上编译它?

这就是所谓的K&R风格C,它不使用函数原型。在C89和C99中,我不记得这个是否仍然支持,它肯定不是合法的C++。< /P> < P> > <代码> Pascal < /C>项目,您粘贴的代码没有错。它是一种较旧的C风格(对C++来说是无效的),不再受欢迎,但仍然有效


去掉PASCAL关键字,它将编译。。。但最好找到帕斯卡所做的一切的定义。我希望它会影响函数的MSVC调用约定。

您可以告诉我们初学者的错误消息。这实际上取决于您得到的编译错误以及生成文件的编译器。我们需要更多的信息来回答这个问题。使用dev-c++我通过注释foo.h中的第一行和最后一行获得了要编译的代码-这两个函数(现在,显然)都已经在winbase中声明了。h特别感谢您的帮助。您指出这是完全有效的c代码。啊,他可能使用了
.cpp
文件。我更新了这个问题,以显示正在使用的标题和编译过程中的第一个错误。这是使用一个.c文件,编号为.cpp。。使用VS2010并将鼠标悬停在PASCAL语句上会显示“#define PASCAL u stdcall”,所以我认为这是可以的-至少在VS2010中是这样。。。