Пятница, 15 Ноября 2024, 07:50

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Нужна помощь в directX
TermiantorДата: Вторник, 19 Октября 2010, 17:31 | Сообщение # 1
почетный гость
Сейчас нет на сайте
Всем привет,прошу помощи!(возможно я создал тему не там где нужно,поэтому прошу не ругатся)
Я начал освоение Директа для последующего использования его в создании игр(до этой цели мне еще пилить и пилить)
Есть БОЛЬШАЯ проблема!По однму из туториалов в книге я должен создать основу для последующих игр и дается код.
После целого дня разбирания мозги скисли и поэтому обращяюсь сюда.
Ошибка воот такая:LINK : error LNK2001: неразрешенный внешний символ "_WinMain"(если в linker-advanced-Entry point вместо WinMain оставить пустое место то пишется LINK : error LNK2001: неразрешенный внешний символ "_WinMainCRTStartup")
я что только не делал и #include <stdafx.h> добавил и либы добавил

Прошу помощи!!!!


Сообщение отредактировал Termiantor - Вторник, 19 Октября 2010, 17:31
AngevengelistДата: Вторник, 19 Октября 2010, 17:53 | Сообщение # 2
постоянный участник
Сейчас нет на сайте
Какой компилятор указывается в книге?
Какой стоит у тебя?
Начинал бы лучше с OpenGL, те же возможности, и несколько привелегий
TermiantorДата: Вторник, 19 Октября 2010, 18:09 | Сообщение # 3
почетный гость
Сейчас нет на сайте
Angevengelist
это 2 различные платформы,смысл начинать с другой,когда эта(directX)не похожа на неё?
у меня microsoft visual c++ 2010 года express edition
nikolas-zДата: Вторник, 19 Октября 2010, 18:46 | Сообщение # 4
был не раз
Сейчас нет на сайте
Ну не скажите, уважаемый.
За одну только кроссплатформенность 1:0 в пользу OpenGL
Ну поставьте себе Code::Blocks под Windows и лепите свои приложения.


Под лежачий камень... мы всегда успеем.
TermiantorДата: Вторник, 19 Октября 2010, 18:57 | Сообщение # 5
почетный гость
Сейчас нет на сайте
nikolas-z,
2:0 в пользу конструкторов
спасибо за совет про Code::Blocks,но все же что у меня с кодом?книга называется Программирование ролевых игр с DirectX (2-е издание).
BlooDVlaDДата: Вторник, 19 Октября 2010, 19:27 | Сообщение # 6
частый гость
Сейчас нет на сайте
Это проблема во "входной точке", т.е. WinMain. Ты создаешь консольное приложение или Win32?
Попробуй вместо int PASCAL WinMain(HINSTANCE hInst, HINSTANCE hPrev,
LPSTR szCmdLine, int nCmdShow) написать int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrev,LPSTR szCmdLine,int nCmdShow)
TermiantorДата: Вторник, 19 Октября 2010, 20:18 | Сообщение # 7
почетный гость
Сейчас нет на сайте
я перед тем как написать тут гуглил такие же ошибки и пытался сделать также но к сожалению мое приложение сделано на приложении win32

Добавлено (19.10.2010, 20:18)
---------------------------------------------
BlooDVlaD, неа,так тоже не хочет(

BlooDVlaDДата: Вторник, 19 Октября 2010, 20:27 | Сообщение # 8
частый гость
Сейчас нет на сайте
Ты когда создаешь приложение Win32 объявление точки входа WinMain не меняй, пусть остается так как создал VS 2010. Просто как бы добавляй код примера к шаблону.
Сам когда пробовал примеры из этой книжки было много проблем. Вообще для изучения DirectX посоветую книжку Фрэнк Луна. Введение в программирование трехмерных игр с DirectX 9.0
BetMoraДата: Вторник, 19 Октября 2010, 20:40 | Сообщение # 9
постоянный участник
Сейчас нет на сайте
Quote (BlooDVlaD)
int PASCAL WinMain(HINSTANCE hInst, HINSTANCE hPrev,
LPSTR szCmdLine, int nCmdShow) написать int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrev,LPSTR szCmdLine,int nCmdShow)

паскаль и винапи дефайнят один и тот же __stdcall - разницы нет
Termiantor, параметры проекта -> С++ -> Система -> верхний комбобокс -> Win32.
Если стоит то, возможно не задефайнен $(VCInstallDir)lib в настройках студии


Перекуём баги на фичи!
Programmer_BIOMSOFTДата: Среда, 20 Октября 2010, 09:50 | Сообщение # 10
был не раз
Сейчас нет на сайте
Вот. НЕ учи по этой книге! Или еси всетаки будешь учить, то умудряйся смотреть новый стандарты и в справку заглядуй!
НО как бы в 2010 еще нет справки( так что поставь себе 2008.
Еси не запуститься(хотя врятли), напишы в личку или сдесь!
Чем смогу помогу...

Code
#include <windows.h>  
#include <stdio.h>  
#include <stdarg.h>
#include <string.h>
//#include <stdafx.h>  

// Экземпляр главного приложения  
HINSTANCE g_hInst; // Глобальный дескриптор экземпляра  
HWND g_hWnd; // Глобальный дескриптор окна  
#define MAX_LOADSTRING 100
#define MAX_LOADSTRING 100

// Размеры окна приложения, его тип, класс и заголовок  
#pragma warning(disable:4996)
///////////////////////////////////////
#define WNDWIDTH 400  
#define WNDHEIGHT 400  
#define WNDTYPE WS_OVERLAPPEDWINDOW  

TCHAR g_szClass[MAX_LOADSTRING];
TCHAR g_szCaption[MAX_LOADSTRING];  

// Главные прототипы функци приложения  

// Точка входа  
int PASCAL _tWinMain(HINSTANCE hInst, HINSTANCE hPrev,  
LPSTR szCmdLine, int nCmdShow);  

// Функция для отображения сообщений об ошибках  
void AppError(BOOL Fatal, char *Text, ...);  

// Процедура обработки ссобщений  
long FAR PASCAL WindowProc(HWND hWnd, UINT uMsg,  
WPARAM wParam, LPARAM lParam);  

// Функции для регистрации и отмены регистрации классов  
BOOL RegisterWindowClasses(HINSTANCE hInst);  
BOOL UnregisterWindowClasses(HINSTANCE hInst);  

// Функция для создания окна приложения  
HWND CreateMainWindow(HINSTANCE hInst);  

// функции для инициализации, завершения работы и обработки кадров  
BOOL DoInit();  
BOOL DoShutdown();  
BOOL DoPreFrame();  
BOOL DoFrame();  
BOOL DoPostFrame();  

int PASCAL WinMain(HINSTANCE hInst, HINSTANCE hPrev,  
LPSTR szCmdLine, int nCmdShow)  
{  
MSG Msg;  

// сохраняем экземпляр приложения  
g_hInst = hInst;  

// Регистрация класса окна  
// Возвращаем управление, если не удалась  
if(RegisterWindowClasses(hInst) == FALSE)  
return FALSE;  

// Создание окна  
// Возвращаем управление, если не удалось  
if((g_hWnd = CreateMainWindow(hInst)) == NULL)  
return FALSE;  

// Инициализация приложения  
// Возвращаемся в случае ошибки  
if(DoInit() == TRUE) {  
// Вход в цикл обработки сообщений  
ZeroMemory(&Msg, sizeof(MSG));  
while(Msg.message != WM_QUIT) {  
// Обработка сообщений Windows (если они есть)  
if(PeekMessage(&Msg, NULL, 0, 0, PM_REMOVE)) {  
TranslateMessage(&Msg);  
DispatchMessage(&Msg);  
} else {  
// Предкадровая обработка,  
// прекращаем обработку кадра,  
// если вернули FALSE  
if(DoPreFrame() == FALSE)  
break;  

// Обработка кадра,  
// прекращаем обработку,  
// если вернули FALSE  
if(DoFrame() == FALSE)  
break;  

// Послекадровая обработка,  
// прекращаем обработку кадра,  
// если вернули FALSE  
if(DoPostFrame() == FALSE)  
break;  
}  
}  
}  
// Функции завершения работы  
DoShutdown();  

// Отменяем регистрацию класса окна  
UnregisterWindowClasses(hInst);  

return TRUE;  
}  

BOOL RegisterWindowClasses(HINSTANCE hInst)  
{  
WNDCLASSEX wcex;  

// Создание и регистрация класса окна  
wcex.cbSize = sizeof(wcex);  
wcex.style = CS_CLASSDC;  
wcex.lpfnWndProc = WindowProc;  
wcex.cbClsExtra = 0;  
wcex.cbWndExtra = 0;  
wcex.hInstance = hInst;  
wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION);  
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);  
wcex.hbrBackground = NULL;  
wcex.lpszMenuName = NULL;  
wcex.lpszClassName = g_szClass;  
wcex.hIconSm = LoadIcon(NULL, IDI_APPLICATION);  

if(!RegisterClassEx(&wcex))  
return FALSE;  

return TRUE;  
}  

BOOL UnregisterWindowClasses(HINSTANCE hInst)  
{  
// Отмена регистрации класса окна  
UnregisterClass(g_szClass, hInst);  

return TRUE;  
}  

HWND CreateMainWindow(HINSTANCE hInst)  
{  
HWND hWnd;  

// Создание главного окна  
hWnd = CreateWindow(g_szClass, g_szCaption,  
WNDTYPE, 0, 0, WNDWIDTH, WNDHEIGHT,  
NULL, NULL, hInst, NULL);  
if(!hWnd)  
return NULL;  

// Отображение и обновление окна  
ShowWindow(hWnd, SW_NORMAL);  
UpdateWindow(hWnd);  

// Возвращаем дескриптор окна  
return hWnd;  
}  

void AppError(bool Fatal, char *Text, ...)  
{  
char CaptionText[12];  
char ErrorText[2048];
va_list valist;  
// Создаем заголовок окна сообщения  
// на основе флага Fatal  
if(Fatal == false)  
strcpy(CaptionText, "Error");
else  
strcpy(CaptionText, "Fatal Error");  
// Создаем текст сообщения  
va_start(valist, Text);  
printf(ErrorText, Text, valist);  
va_end(valist);  

// Отображаем окно сообщений  
MessageBoxA(NULL, ErrorText, CaptionText,  
MB_OK | MB_ICONEXCLAMATION);  

// Отправляем сообщение о завершении работы приложения,  
// если ошибка является фатальной  
if(Fatal == TRUE)  
PostQuitMessage(0);  
}  

// Процедура обработки сообщений - обрабатывает только  
// сообщение о завершении работы приложения  
long FAR PASCAL WindowProc(HWND hWnd, UINT uMsg,  
WPARAM wParam, LPARAM lParam)  
{  
switch(uMsg) {  
case WM_DESTROY:  
PostQuitMessage(0);  
return 0;  
}  
return DefWindowProc(hWnd, uMsg, wParam, lParam);  
}  

BOOL DoInit()  
{  
// Здесь выполняются функции инициализации приложения,  
// такие как инициализация графической системы, сети, звука и т.д.  
// Возвращает TRUE в случае успешной инициализации и FALSE при ошибке.  

return TRUE;  
}  

BOOL DoShutdown()  
{  
// Здесь выполняются действия, завершающие работу приложения,  
// такие как отключение график, звука и т.д. Возвращает TRUE  
// в случае успешного завершения работы и FALSE при ошибке.  

return TRUE;  
}  

BOOL DoPreFrame()  
{  
// Выполняет подготовку к формированию кадра, например,  
// установку таймера. Возвращает TRUE в случае успешной  
// подготовки и FALSE при ошибке.  

return TRUE;  
}  

BOOL DoFrame()  
{  
// Выполняет операции формирования кадра, такие как визуализация.  
// Возвращает TRUE при успехе и FALSE при ошибке.  

return TRUE;  
}  

BOOL DoPostFrame()  
{  
// Выполняет посткадровую обработку, например,  
// синхронизацию со временем и т.д.  
// Возвращает TRUE при успехе и FALSE при ошибке.  

return TRUE;  
}


Сообщение отредактировал Programmer_BIOMSOFT - Среда, 20 Октября 2010, 12:09
SlavyanOOsДата: Среда, 20 Октября 2010, 14:59 | Сообщение # 11
Problems, developer?
Сейчас нет на сайте
Quote (Programmer_BIOMSOFT)
НО как бы в 2010 еще нет справки(

facepalm
Есть она, просто устанавливается по другому smile
Programmer_BIOMSOFTДата: Четверг, 21 Октября 2010, 01:37 | Сообщение # 12
был не раз
Сейчас нет на сайте
Это уже не то... MSDN - это справка... офф справка.. Нормальной справки для 2010 еще нету.
TermiantorДата: Четверг, 21 Октября 2010, 22:23 | Сообщение # 13
почетный гость
Сейчас нет на сайте
Всем вспасибо,заработало..
BetMoraДата: Пятница, 22 Октября 2010, 17:01 | Сообщение # 14
постоянный участник
Сейчас нет на сайте
Quote (Programmer_BIOMSOFT)
Это уже не то... MSDN - это справка... офф справка.. Нормальной справки для 2010 еще нету.

MSDN - это ненормальная справка? Вокруг твоих постов сплошь лулзы. И для 10-й студии справка есть, купив/скачав с торрента диск полной версии ты в этом убедишься.


Перекуём баги на фичи!
ezhickovichДата: Вторник, 26 Октября 2010, 23:19 | Сообщение # 15
[Великий и могучий хозяинъ]
Сейчас нет на сайте
Quote (Programmer_BIOMSOFT)
MSDN - это справка

Quote (Programmer_BIOMSOFT)
Это уже не то...

Quote (Programmer_BIOMSOFT)
Нормальной справки для 2010 еще нету.

Бред...
Если человеку MSDN - "НЕ НОРМАЛЬНАЯ СПРАВКА", то могу ли я поинтересоваться?
Что же тогда нормальная справка в твоём понимании? wink



Я: О великий повелитель этой ничтожной вселенной - сокращённо ЁЖ!
Programmer_BIOMSOFTДата: Суббота, 30 Октября 2010, 03:02 | Сообщение # 16
был не раз
Сейчас нет на сайте
А то я тупанул чет) Не подумавшы написал, с вс2010 я не работаю, когда искал, а это было очень давно то ее еще небыло... МСДН я имею ввиду... И я не писал чтио МСДН говно)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг