Объединение двух программ: одна с main (), другая с WinMain () - PullRequest
2 голосов
/ 07 октября 2010

Я хочу объединить две программы в один исполняемый файл. Одна из них - это программа с открытым исходным кодом, имеющая довольно сложный файл проекта, другая - моя, с гораздо более простой структурой. Из-за относительной сложности файлов проекта я считаю, что было бы разумнее начать с проекта с открытым исходным кодом и изменить его, чтобы он включал мои исходные файлы.

Мое намерение состоит в том, чтобы моя программа контролировала и рассматривала другую как набор служебных функций.

Я заметил, что в программе с открытым исходным кодом есть функция с именем "main ()", а у моей - "WinMain ()". Предположительно я должен сказать компилятору сначала вызвать мой WinMain (). Как мне это сделать?

Есть ли еще что-то, о чем я должен знать в процессе слияния?

РЕДАКТИРОВАТЬ: Обе программы на C ++, а не C.

РЕДАКТИРОВАТЬ: Программа с открытым исходным кодом делает очень мало io.

РЕДАКТИРОВАТЬ: Главное, что я хочу знать, это то, что я должен изменить что-то в настройках проекта, чтобы сказать: «Это программа Windows, использующая WinMain (), а не консольную (?) using main () "или компилятор каким-то образом решит это сам.

ОБНОВЛЕНИЕ: Совместная программа запущена и работает.

Ответы [ 3 ]

2 голосов
/ 07 октября 2010

Если ваша программа имеет WinMain(), это, вероятно, программа Windows, а другая - приложение командной строки.В зависимости от того, что на самом деле делают оригинальные приложения, это может затруднить их объединение.Например, если другое приложение широко использует стандартный ввод / вывод, сложно преобразовать его в приложение Windows.Однако, если это просто набор утилитарных методов без побочных эффектов, вы можете просто добавить код в свой проект и начать его использовать.

Вы должны настроить свой проект для генерации исполняемого файла Windows, вызовдля вашей функции WinMain() компоновщик автоматически организует ее.

1 голос
/ 07 октября 2010

Если функция командной строки main требует инициализации, вам нужно переименовать ее и вызвать из WinMain.Если нет, вы можете просто удалить его полностью.#if ... #else ... #endif было бы хорошо в любом случае.

Важно то, что компоновщик больше не может найти функцию с именем main.

В ответе Питера рассматриваются некоторые другие проблемы , с которыми вы можете столкнуться во время процесса портирования, которые не имеют прямого отношения к main против WinMain.

0 голосов
/ 07 октября 2010

main означает, что у вас есть программа на C или C ++, WinMain означает, что у вас есть программа для Windows, и их нельзя легко объединить.

Я бы посоветовал вам начать с вашей программы Windows в Visual Studio и добавить методы / классы / функции, которые вам нужны и которые находятся в других исходных файлах.

...