С++
| |
Gunner | Дата: Четверг, 11 Фев 2010, 18:04 | Сообщение # 1 |
Подполковник
Группа: Опытный
Сообщений: 117
| таквот, очом я? ахда, клеополигон на время сворачивается, для меня начинаецо эра цепепе! сопсно зачем создаю тему: если у когото есть ссылки или доки с исходниками программ, с вменяемыми комментариями, то выклодивайте сюда, не ленитесь, этим вы быть может продвинете прогресс в создании мною плагинов для сампа, и других полезных весчей для начала хотелось бы увидеть нормальные пояснения к вот этому вот (код пустого окна): Code #include <windows.h>
/* Declare Windows procedure */ LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
/* Make the class name into a global variable */ char szClassName[ ] = "WindowsApp";
int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil)
{ HWND hwnd; /* This is the handle for our window */ MSG messages; /* Here messages to the application are saved */ WNDCLASSEX wincl; /* Data structure for the windowclass */
/* The Window structure */ wincl.hInstance = hThisInstance; wincl.lpszClassName = szClassName; wincl.lpfnWndProc = WindowProcedure; /* This function is called by windows */ wincl.style = CS_DBLCLKS; /* Catch double-clicks */ wincl.cbSize = sizeof (WNDCLASSEX);
/* Use default icon and mouse-pointer */ wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION); wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION); wincl.hCursor = LoadCursor (NULL, IDC_ARROW); wincl.lpszMenuName = NULL; /* No menu */ wincl.cbClsExtra = 0; /* No extra bytes after the window class */ wincl.cbWndExtra = 0; /* structure or the window instance */ /* Use Windows's default color as the background of the window */ wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
/* Register the window class, and if it fails quit the program */ if (!RegisterClassEx (&wincl)) return 0;
/* The class is registered, let's create the program*/ hwnd = CreateWindowEx ( 0, /* Extended possibilites for variation */ szClassName, /* Classname */ "Windows App", /* Title Text */ WS_OVERLAPPEDWINDOW, /* default window */ CW_USEDEFAULT, /* Windows decides the position */ CW_USEDEFAULT, /* where the window ends up on the screen */ 544, /* The programs width */ 375, /* and height in pixels */ HWND_DESKTOP, /* The window is a child-window to desktop */ NULL, /* No menu */ hThisInstance, /* Program Instance handler */ NULL /* No Window Creation data */ );
/* Make the window visible on the screen */ ShowWindow (hwnd, nFunsterStil);
/* Run the message loop. It will run until GetMessage() returns 0 */ while (GetMessage (&messages, NULL, 0, 0)) { /* Translate virtual-key messages into character messages */ TranslateMessage(&messages); /* Send message to WindowProcedure */ DispatchMessage(&messages); }
/* The program return-value is 0 - The value that PostQuitMessage() gave */ return messages.wParam; }
/* This function is called by the Windows function DispatchMessage() */
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) /* handle the messages */ { case WM_DESTROY: PostQuitMessage (0); /* send a WM_QUIT to the message queue */ break; default: /* for messages that we don't deal with */ return DefWindowProc (hwnd, message, wParam, lParam); }
return 0; } //ненадо меня тыкать в английские комментарии, инглиш я знаю, но коменты здесь ращитаны не на полных нубов в спп, коим я являюсь)) //нашел на одном из сайтов из списка ниже почти вменяемый исходнег, но всетаки хотелось бы поподробнее от себя могу представить небольшой список хороших ресурсов: • кибергуру - очень много туторов, исходных кодов, причем не только по с++ • книжки по с++ - кстати очень рекомендую вот эту книгу, там разжевано все что можно и нельзя, но ксожалению в ней затрагиваются только консольные приложения • еще один сайтег, впринципе ничего примечательного, развечто скажу что это был первый сайт по циплюсу который я нашол вопщем, cout << "preved, c++!\n";, пожелайте мне удачи в освоении этих страшных трех букв и помогите чем можете 
|
|
| |
Аниме | Дата: Четверг, 11 Фев 2010, 20:46 | Сообщение # 2 |
Аниме стайл=)
Группа: Проверенные
Сообщений: 102
| Так для начала это не то место куда следует писать, на том же кибергуру есть куча информации (книг, тем, статей). Если хочешь заниматься всерьез а не просто побаловаться следует учиться где этому учат, программист самоучка многого не добьется, ну а что бы проверить себя следует посетить сайт на котором я понял что это не мое. Лови, http://www.intuit.ru/ - там видео-лекции которые длятся по часу, интерактивные задания, экзамены, все очень интересно. http://forum.vingrad.ru/ Еще один довольно интересный форум, много статей, тем, есть что почитать очень давно существует, много полезной информации по созданию игр, я так понял ты к этому стремишься т.к первым про то что ты спрашиваешь это пустое окно, почитай книги по DirectX есть несколько авторов, русских, и не сколько книг с переводом на русский язык, читай все, и если все таки это всерьез постарайся не прибегать к помощи более задротных программистов, у них свои коды которые возможно в будущем плохо повлияют на тебя. Желаю удачи в этом не легком деле, это тебе не павно где все что от тебя требуется давать команду клиенту, программируя на C++ ты сам разрабатываешь клиент. Good luck!
|
|
| |
Gunner | Дата: Четверг, 11 Фев 2010, 21:41 | Сообщение # 3 |
Подполковник
Группа: Опытный
Сообщений: 117
| сенкс аниме, спп я буду учить серьезно, т.к учусь на программиста) сайты гууд, нащот реальных курсов это да, так или иначе придется кудато идти, так как интернед еще не дошел до того чтобы можно было задавать вопросы и получать конкретные ответы до игр мне еще оооочень далеко) мне бы для начала освоить консольные возможности)
|
|
| |
dimonml | Дата: Четверг, 11 Фев 2010, 22:51 | Сообщение # 4 |
Лейтенант
Группа: Юзверь
Сообщений: 61
| C++ это сложно и интересно Чтобы программировать на C++ нужно знать: сам язык, синтаксис базовых конструкций (или хотя бы знать, что такие конструкции есть), знать стандартную библиотеку стримов (iostreams), стандартную библиотеку шаблонов STL (Если посмотреть актуальный стандарт на язык С++, то там половина стандарта, это описание самого языка, вторая половина это описание стандартной библиотеки), знать (по крайней мере то, что вошло в TR1) библиотеку boost ( http://www.boost.org/ ). Из почитать на продвинутом уровне могу порекомендовать все книги издательства вильямс серии c++ in depth. По ИТ, и программированию в частности, рекомендую читать только переводную литературу или исходные англоязычные тексты (за всю жизнь не видел ни одной хорошей книжки по компьютерной тематике русскоязычного автора) Gunner, тот код, который приведен не относиться к C++ и это не то, с чего следует начинать его изучение. Там структурный код (язык С) и там используется Win API, а не стандартная библиотека (то есть код только для виндоус). У майкрософта еще есть библиотека MFC ее тоже смотреть не стоит, так как у нее ужасный дизайн (и он не сколько не С++ подобный ) и она опять же только под виндоус (MFC такая, потому что она тянет свою историю еще со времен виндоуса 2.0 и имеет некоторую обратную совместимость с очень старым кодом. А в те времена у майкрософта не было компилятора, который мог компилировать С++ код, а не просто C с объектами). Добавлено (11 Фев 2010, 22:51) --------------------------------------------- Да, в догонку Вообще С++ это не столько язык, сколько способ мышления. Это умение разложить задачу в термины языка (формализовать ее). За историю развития языков программирования были выведены некоторые часто встречающиеся ситуации и описаны как эти проблемы лучше всего реализовывать. Так что после базового вникания в язык, рекомендую почитать литературу про Патерны проектирования (начать следует с банды четырех ).
|
|
| |
Gunner | Дата: Четверг, 11 Фев 2010, 23:00 | Сообщение # 5 |
Подполковник
Группа: Опытный
Сообщений: 117
| dimonml, ну я же не совсем нуп апи это конечно поебень редкостная, а в том компиляторе что я использую как я понял вообще нету конструктора форм (а визуал студио мне ненравицо =\), даиваще, у с++ такое разнообразие компиляторов.. борланд, вс, девспп, и у каждого какието свои особенности.. но вопщем я с тобой согласен, особенно по части книг - редко встретишь щас нормальные "наши" книги по компьютерным темам.. вильямс доо, хорошее издательство, у меня вроде книга по здмакс7 их издательства
|
|
| |
dimonml | Дата: Воскресенье, 21 Мар 2010, 19:53 | Сообщение # 6 |
Лейтенант
Группа: Юзверь
Сообщений: 61
| Quote (Gunner) апи это конечно поебень редкостная, а в том компиляторе что я использую как я понял вообще нету конструктора форм (а визуал студио мне ненравицо =\), даиваще, у с++ такое разнообразие Конструктор форм, гуи и прочее к компилятору отношения никакого не имеет. Это может быть среда разработки со своей библиотекой. Если ты хочешь изучать С++, а не просто пытаться рисовать красивые диалоги, то ты не в ту сторону смотришь. Есть стандарт на язык С++, есть возможное (и от части уже реализуемое) будущие этого стандарта в виде буста - вот это нужно смотреть в первую очередь. Любую библиотеку для Гуи при желании уже можно будет прикрутить. Но в начале нужно именно понимание самого языка. В окошках ты его не найдешь, так как нет хорошо спроектированных объектно-ориентированных библиотек, которые без костылей компилировались бы на компиляторе, который поддерживает только стандарт (без всяких нестандартных расширений, например как у борланда в VCL, одни виртуальные конструкторы чего стоят ) Добавлено (21 Мар 2010, 19:53) --------------------------------------------- Мне ганнер написал вопрос в личку, по поводу того, как читать память на языке C. У вас на сайте очень жесткие ограничения на длину сообщений в личках, поэтому я думаю он не будет против, если я приведу код тут: Code #include <windows.h> #include <iostream>
int main(int argc, char* argv[]) { HWND hWnd; DWORD dwID; HANDLE hProcess;
hWnd = FindWindow(NULL, "GTA:SA:MP");
GetWindowThreadProcessId(hWnd, &dwID); hProcess = OpenProcess(PROCESS_ALL_ACCESS, NULL, dwID); BOOL rezult; // Сюда будет писать результат выполнения функции
float plpoint; float x; float y; float z;
rezult = ReadProcessMemory(hProcess, reinterpret_cast<LPVOID>(0xB6F5F0), &plpoint, sizeof(plpoint), 0); if (!rezult) { // Произошла ошибка - нужно как то обработать эту ситуацию return 1; }
rezult = ReadProcessMemory(hProcess, reinterpret_cast<LPVOID>(0xB6F5F0 + 0x14 + 0x30), &x, sizeof(x), 0); if (!rezult) { // Произошла ошибка - нужно как то обработать эту ситуацию return 1; } rezult = ReadProcessMemory(hProcess, reinterpret_cast<LPVOID>(0xB6F5F0 + 0x14 + 0x34), &y, sizeof(y), 0); if (!rezult) { // Произошла ошибка - нужно как то обработать эту ситуацию return 1; } rezult = ReadProcessMemory(hProcess, reinterpret_cast<LPVOID>(0xB6F5F0 + 0x14 + 0x38), &z, sizeof(z), 0); if (!rezult) { // Произошла ошибка - нужно как то обработать эту ситуацию return 1; }
std::cout << x << "\n"; std::cout << y << "\n"; std::cout << z << "\n"; return 0; }
|
|
| |
|