2014-11-22 3 views
0

Я сделал некоторое программное обеспечение с использованием SDL и OpenGL, и теперь я хотел бы добавить графический интерфейс для ввода, например, некоторые текстовые поля и кнопки. Я понимаю, что это, вероятно, должно быть в отдельном окне, и я не против, но я не знаю, как включить функции Win32 в свой проект. Я попытался изменить определение моей главной функции отКак включить Win32 в проект SDL?

int main(int argc, char **argv) 
{ 
    ... 
} 

в

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE prevInstance, LPSTR lpCmdLine, int cmdShow) 
{ 
    ... 
} 

Но я получаю ошибки, которые говорят:

LNK2005: [email protected] already defined in SDL2main.lib (SDL_windows_main.obj) 
LNK2005: [email protected] already defined in Source.obj 
LNK2019: unresolved external symbol _SDL_main referenced in function _main 

Я использую Visual Studio 2012. ли есть способ решить это, или есть альтернативный способ создания форм в C++?

Благодаря

+0

Графический интерфейс пользователя не обязательно должен находиться в отдельном окне. Вам просто нужны виджеты, которые могут отображать opengl. Существуют библиотеки gui, которые это делают. –

ответ

2

SDL определяет main как макрос. Это похоже на ужасное шоу ужасов. Смешение чудовищности Microsoft WinMain в этом может показаться уместным, конечно, но ничего не нужно.

Вместо этого просто держите свой main.

Если бы я взял на себя обязательство использовать SDL (что, учитывая вышеизложенное, я бы никогда не сделал), тогда я бы в первую очередь проверил, что SDL предлагает в виде текстовых полей и кнопок. Если их нет, просто включите <windows.h> (сначала определите STRICT и NOMINMAX и UNICODE) и используйте API. Но для этого я предлагаю сначала изучить этот API, создав несколько чистых программ API без вмешательства SDL.

+0

Чтобы расширить это, потому что он кажется, что 'WinMain' уже определен библиотекой, вы можете просто продолжать использовать' main'. Если вы не хотите консоль, просто измените свой исполняемый тип вывода (в настройках компоновщика проекта). –

+0

Что вы подразумеваете под «use main»? Если бы я использовал мою существующую основную функцию, как я могу использовать функциональность Win32, откуда бы я получил свой hInstance и материал? –

+1

@HarWiltz: дескриптор экземпляра в основном необходим только для ресурсов. Вызов 'GetModuleHandle (0)' извлекает дескриптор экземпляра для текущего исполняемого файла, если у вас есть ресурсы. Передайте ему имя DLL, чтобы получить дескриптор экземпляра для некоторой загруженной DLL. Задайте новые вопросы SO для новых проблем. Комментарии SO предназначены не для поддержки обсуждения, поэтому вы можете себе представить, что учебник несколько выходит за рамки дизайна. –

Смежные вопросы