我已经完成了尝试让旧程序在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上编译?
答案 0 :(得分:2)
这就是所谓的K& R style C,它不使用函数原型。我不记得在C89和C99中是否仍然支持它,它肯定不是合法的C ++。
答案 1 :(得分:0)
排除PASCAL
项,您粘贴的代码没有任何问题......它是较旧的C风格(对C ++无效),不再支持但仍然有效。
摆脱PASCAL关键字,它将编译......但最好找到PASCAL所做的任何定义。我希望#define'd能影响函数的MSVC调用约定。