Sergei Shaykin
GameDev.ru / Страницы / Sergei Shaykin / Форум / Работаем с MS Visual Studio. (комментарии)

Работаем с MS Visual Studio. (комментарии)

Поделиться

Страницы: 1 2 Следующая

watВедущийwww21 окт. 200620:16#0
Работаем с MS Visual Studio. (комментарии)

Это сообщение сгенерировано автоматически.

SamoletX84Новичокwww21 окт. 200620:16#1
Привет!

Хотелось бы получить мнение сведущего человека. 

У меня следующая ситуация: имеется код движка на C++. Хочется написать к нему расширение в виде DLL на C++. Таким образом, dll-ка должна иметь доступ ко всем *.cpp файлам в движке. Последний на винчестере расположен во множестве папок, например:

engine/
engine/core
engine/math
engine/rendering

Я создал проект для расширения и добавил его к существующему (чтобы все было навиду). Вот и сам вопрос: можно ли обеспечить вышеупомянутый доступ к исходникам "не через добавление их в проект с расширением"?

watВедущийwww26 окт. 20069:06#2
Уточняю, у тебя есть движок, который использует cpp файлы, к нему ты пишешь dll, которая должна компилировать те же самые файлы cpp? Если так, то ты не верно делаешь. Модули должны различаться именно cpp файлами. Связка идёт через интерфейсы - функции или виртуальные классы, например.
DjoNIKПостоялецwww13 дек. 200619:15#3
Привет всем!
Я собственно по какому поводу - в стать логическая ошибка (при сборке приложение жрет все ресурсы процессора). Решение проблемы оказалась простым - заменить

while(msg.message!=WM_QUIT)
{
.....................
if(GetMessage(&msg, NULL, 0, 0))
  {
  .....................
  }
.....................
}

на:

if(msg.message!=WM_QUIT)
{
.....................
while(GetMessage(&msg, NULL, 0, 0))
  {
  .....................
  }
.....................
}

Очень большая прозьба исправьте пожалуйста. Сам был в шоке от загрузки ЦП на 100% и еле-еле нашёл эту логическую ошибку.

watВедущийwww13 дек. 200619:26#4
DjoNIK
Пример в статье не для всех типов приложений, а для игровых, которым нужно перерисовывать постоянно выводимый кадр независимо от того, приходят сообщения от Виндавса или нет. Поэтому и занимает 100%.

offtop:
Правда, о самом цикле в целом: думаю, было бы правильно, чтобы игровой цикл не содержал в условии и в открытом виде виндозную обработку. Она должна происходить в какой-то функции, вызываемой из тела функции.

TheMamontПостоялецwww3 дек. 200723:58#5
Мне понравилось. :)

Да, статья проста и описывает только первый шаг.
Но именно такая статья иногда нужна человеку, который переходит на Visual C++. По себе знаю - долго не мог отказаться от Delphi. Всё потому что вместо вот такой коротенькой статьи-обзора мне подсовывали толмуты типа Рихтера и Петзольда. И глядя на них, всё меньше было желания переходить на виж.

Теперь бы ещё несколько статей по ключевым моментам WinAPI и по ресурсам добавить - это будет хорошей основой. Так сказать, отправной точкой для дальнейшего развития. (Эх, шо-то я губу раскатал...)

Вобщем за статью - 5 баллоф!

v_0verПостоялецwww1 мая 200812:22#6
Здраствуйте, у меня проблемма с запускои примера.
 wndclass.hIcon = LoadIcon (hInstance, szAppName); 
error C2664: 'LoadIconW' : cannot convert parameter 2 from 'const char *' to 'LPCWSTR'
 wndclass.lpszMenuName  = szAppName;
 wndclass.lpszClassName = szAppName; 
error C2440: '=' : cannot convert from 'const char *' to 'LPCWSTR'

Всё делал под MS Visual C++ 2008, видно ему не подходит формат данных которые я ему даю, помогите, пожалуйста.

v_0verПостоялецwww1 мая 200812:43#7
а всё проблемма решилась ALT+F7->Configuration Properties->Character Set->Not Set
КЕНПостоялецwww1 июля 200917:04#8
Засунул код в visual c++ 6.5 и он выдает ошибку: error c2146: syntax error : messing ';' before identifier 'CreateWindowExA'.  Че за ерунда все прорыл нигде такой строчки найти не могу! Че делать?
watВедущийwww1 июля 200917:38#9
КЕН
windows.h подключил?
КЕНПостоялецwww1 июля 200917:40#10
Да, подключил. И версию я неправильно написал, там 6.0
watВедущийwww2 июля 200913:14#11
КЕН
а тупо по тексту ошибки точки с запятой нигде не пропустил возле функции CreateWindow(...) ?
КЕНПостоялецwww2 июля 200916:57#12
А-а-а-х если бы, давно у же нашел. Хрен его знает. Ладно смысл ясен и на том спасибо.
PA3UJIbПостоялецwww7 мая 20129:50#13
Очень интересная и полезная статья. Хочу перевести все это на ООП и дальше в OpenGL с таким подходом пойти.
В объекте регистрируется класс окна, настраиваются стиль и реакция на OpenGL, создается само окно. Запускается обработчик сообщений. В общем все, как в статье.
Так вот при регистрации у меня не удается класс окна принять мою функцию обработки сообщений. Выполнена она у меня как метод того же объекта.
Вроде и параметры все на месте, и __stdcall. А компилятор выдает
приведение типов: невозможно преобразовать 'overloaded-function' в 'WNDPROC'
1>        Конечному типу не соответствует ни одной функции с данным именем в области видимости
Не могу понять в чем дело. Судя по ошибке, функция типа перегружена, но самом деле и в заголовочном файле, и в реализации одно и то же написано, везде четыре параметра (HWND, UINT, WPARAM, LPARAM). Может с указателем не так работаю - пробовал и просто по имени (благо, что внутри класса), и по this->, и по по this::. Ответ один у компилятора. Может кто-нить объяснить, в чем я ошибся.
LRESULT WINAPI simpleWindow::windowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
  switch (msg)
  {...}
  return CallWindowProc( (WNDPROC)DefWindowProc, windowID, msg, wParam, lParam );
}

HWND simpleWindow::createWindow(LPCSTR pWindowName, int nWidth, int nHeight, int nCmdShow, bool bIsOpenGL)
{
  WNDCLASS wndClass;
  //регистрируем класс окна
  wndClass.style      = 0;
  wndClass.lpfnWndProc  = (WNDPROC)(this->windowProc);
  wndClass.cbClsExtra    = 0;
...
}
 

Полный код
simpleWindow.h
simpleWindow.cpp
main.cpp

gammakerПостоялецwww7 мая 201212:38#14
>Очень интересная и полезная статья.
Меганекропостинг. Эта статья была написана почти 10 с половиной лет назад.

По поводу вопроса. Функции-члены класса имеют соглашение _thiscall. Туда передаётся скрытый параметр this. Поэтому она не совпадает с сигнатурой WNDPROC. Тебе придётся сделать глобальную или статическую оконную процедуру, которая по дескриптору окна определит адрес объекта окна. По нему уже можно будет вызвать собственную оконную процедуру. Для этого надо привязать адрес объекта к самому окну. Окно нужно создавать функцией CreateWindowEx и передать ей this в последнем параметре. Его мы извлечём в статической оконной процедуре, которая должна выглядеть так:

//Оконная процедура для всех окон класса Window
LRESULT _stdcall Window::StaticWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
  if(uMsg==WM_NCCREATE)
  {
    Window* This=(Window*)((CREATESTRUCT*)lParam)->lpCreateParams;
    SetWindowLongPtrA(hWnd, GWLP_USERDATA, (LONG_PTR)This);
    return 1;
  }
  Window* This=(Window*)GetWindowLongPtrA(hWnd, GWLP_USERDATA);
  if(!This) return DefWindowProc(hWnd, uMsg, wParam, lParam);
  return This->MyWndProc(uMsg, wParam, lParam);
}

Страницы: 1 2 Следующая

/ Форум / Sergei Shaykin

Тема в архиве.

2001—2017 © GameDev.ru — Разработка игр