编译旧的C代码

时间:2011-06-10 11:39:44

标签: 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(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 / 64bit上编译?

2 个答案:

答案 0 :(得分:2)

这就是所谓的K& R style C,它不使用函数原型。我不记得在C89和C99中是否仍然支持它,它肯定不是合法的C ++。

答案 1 :(得分:0)

排除PASCAL项,您粘贴的代码没有任何问题......它是较旧的C风格(对C ++无效),不再支持但仍然有效。

摆脱PASCAL关键字,它将编译......但最好找到PASCAL所做的任何定义。我希望#define'd能影响函数的MSVC调用约定。