компилировать старый код c - PullRequest
0 голосов
/ 10 июня 2011

Я взял на себя задачу попробовать запустить более старую программу под 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 ]

2 голосов
/ 10 июня 2011

Это то, что называется стилем C K & R, в котором не используются прототипы функций.Я не могу вспомнить, если это все еще поддерживается в C89 и C99, это, конечно, не разрешено C ++.

0 голосов
/ 10 июня 2011

За исключением элемента PASCAL, в коде, который вы вставили, нет ничего плохого ... это более старый стиль C (и недействительный для C ++), больше не в пользу, но все еще действительный.

Избавьтесь от ключевого слова PASCAL, и оно скомпилируется ... но было бы лучше найти определение того, что сделал PASCAL. Я ожидаю, что это # ​​define'd повлияет на соглашение о вызовах функции MSVC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...