2011-06-10 68 views
0

我已經完成了試圖讓一個較舊的程序在Vista/Win7下運行的任務。
代碼看起來像C代碼,但 「奇怪」編譯較舊的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位編譯(這是老......)

代碼帶有一個補充文件,該文件規定:

# 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上編譯?

+1

你可以告訴我們初學者的錯誤信息。 – cnicutar 2011-06-10 11:41:40

+0

這實際上取決於你得到的編譯錯誤,以及生成makefile的編譯器。我們需要更多信息來回答這個問題。 – 2011-06-10 11:43:25

+0

使用dev-C++我得到的代碼可以通過註釋foo.h中的第一行和最後一行進行編譯 - 這兩個函數都是(現在顯然)已經在winbase.h中聲明瞭感謝您的幫助esp。指出這是完全有效的c代碼。 – Nils 2011-06-10 14:19:01

回答

2

這就是所謂的K & R風格C,它不使用函數原型。我不記得在C89和C99中是否仍然支持這個功能,它肯定不是合法的C++。

+0

啊,他可能使用'.cpp'文件。事實確實如此。 – cnicutar 2011-06-10 11:47:17

+0

我更新了問題以顯示正在使用的標題和編譯期間的第一個錯誤。這是使用.c文件,沒有.cpp .. .. – Nils 2011-06-10 12:07:00

0

不包括PASCAL項目,您粘貼的代碼沒有問題......它是C的一種較舊的樣式(對C++無效),不再支持,但仍然有效。

擺脫PASCAL關鍵字,它會編譯...但它會更好地找到任何PASCAL做的定義。我期望它是#define'd影響函數的MSVC調用約定。

+0

使用VS2010,並懸停在PASCAL語句上「#define PASCAL __stdcall」,所以我認爲這是好的 - 至少在VS2010中... – Nils 2011-06-10 12:04:05