спасиб, окошко появилось Как теперь вызвать допустим, regedit в win console app? DWORD WINAPI func(LPVOID) { system("regedit"); return 1; } Все компилится, вот только regedit не вызывается
irc Пытаюсь работать с irc через winsock. Вопрос скорее даже по irc протоколу... Код: PHP: //--------------------------------------------------------------------------- #include <winsock.h> #pragma hdrstop //--------------------------------------------------------------------------- #pragma argsused int main(int argc, char* argv[]) { WSADATA ws; SOCKET s; struct sockaddr_in servaddr, client; char buf[MAX_PATH]; WSAStartup (MAKEWORD(1,1), &ws); s = socket(AF_INET, SOCK_STREAM, 0); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(6667); servaddr.sin_addr.s_addr = inet_addr("194.109.129.222"); connect(s,(struct sockaddr *)&servaddr,sizeof(servaddr)); sendto(s, "/NICK ircbotuuuuuuuuuuuu;", 30, 0, (struct sockaddr *)&servaddr, sizeof(servaddr)); bind(s,(SOCKADDR*)&servaddr,sizeof(servaddr)); while(1) { int iSize = sizeof(client); recvfrom(s,buf,MAX_PATH,0,(struct sockaddr *)&servaddr,&iSize); printf("%s",buf); } return 0; } //--------------------------------------------------------------------------- PING не приходит. ВниманИе вапРос: ШО ДЕЛАТЬ? спс.
это что за кракозябр?) Почитай RFC, вроде на русском даже был. По теме, нужно примерно так: "NICK botnickname\r\n" "USER botuser 8 * : Comment\r\n" Причем "\r\n" обязательны. Некоторые ирк сети помимо стандартный NICK и USER имеют свою авторизацию (прим. quakenet).
Пытаюсь создать/открыть текстовый документ вполне необычным образом и дописать в него данные, ничего не получается.. Code: bool Save_Data(char *data) { HANDLE HFile = 0, HMap = 0 ; PBYTE buf = 0 ; if( (HFile = CreateFile(L"file.log", GENERIC_WRITE|GENERIC_READ, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_HIDDEN , NULL)) != INVALID_HANDLE_VALUE ) { if ( ( HMap = CreateFileMapping( HFile, 0, PAGE_READWRITE, 0,0, L"file.log" ) ) != 0 ) { if ( ( buf = ( PBYTE )MapViewOfFile( HMap, FILE_MAP_WRITE, 0, 0, 0 ) ) != 0 ) { lstrcpyA( (char*)buf+(FILE_SIZE), data ) ; } else { MessageBox(NULL,L"Ошибка MapViewOfFile !",L"Ошибка",MB_ICONERROR); if ( HMap ) CloseHandle( HMap ) ; if ( HFile ) CloseHandle( HFile ) ; return(false); } } else { MessageBox(NULL,L"Ошибка CreateFileMapping!",L"Ошибка",MB_ICONERROR); if ( HFile ) CloseHandle( HFile ) ; return(false); } } else { MessageBox(NULL,L"Ошибка при открытии создании файла !",L"Ошибка",MB_ICONERROR); return(false); } if ( buf ) UnmapViewOfFile( buf ) ; if ( HMap ) CloseHandle( HMap ) ; if ( HFile ) CloseHandle( HFile ) ; return(true); }
В memory mapped файлы дописывать данные нельзя (точнее можно, но это бессмысленно и неудобно). Можно только читать или перезаписывать данные так, чтобы размер файла не менялся.
2Guffi надо при вызове CreateFileMapping указать размер больше истинного размера файла вот пример Code: static BOOL WINAPI AppendDataToFile(PCTSTR Filename, PVOID Append, SIZE_T AppendSize) { HANDLE hFile, hMap; PBYTE Buff; LARGE_INTEGER Size; hFile = CreateFile(Filename, GENERIC_WRITE|GENERIC_READ, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_HIDDEN, NULL); if (INVALID_HANDLE_VALUE != hFile) { Size.LowPart = GetFileSize(hFile, &Size.HighPart); if (INVALID_FILE_SIZE != Size.LowPart) { Size.QuadPart += AppendSize; hMap = CreateFileMapping(hFile, 0, PAGE_READWRITE, Size.HighPart, Size.LowPart, Filename); if (hMap) { Buff = MapViewOfFile(hMap, FILE_MAP_WRITE, 0, 0, 0); if (Buff) { memcpy(Buff + Size.QuadPart - AppendSize, Append, AppendSize); UnmapViewOfFile(Buff); CloseHandle(hMap); CloseHandle(hFile); return TRUE; } CloseHandle(hMap); } } CloseHandle(hFile); } return FALSE; }
Ну я и говорю что неудобно) Размер новый может быть заранее неизвестен. Я бы посоветовал открыть файл для добавления данных, перейти в конец файла и дописать туда то, что необходимо. Даже если размер файла будет большим, это не займет много времени.
интересно зачем это ТС'у смотрю сейчас CreateFileMapping сделает файл больше и если после MapViewOfFile потерпит неудачу надо по идее вернуть старый размер SetFilePointer SetEndOfFile меньше на AppendSize они в свою очередь тоже могут вернуть ошибку вообщем надо делать копию и оперировать копию если чуть чего восстанавливать старую копию
Сильно много пафоса в коде для обычного лога не правда?=) Спасибо справился) Просто эксперементирую с новыми способами..)
разбираюсь с STL, в иступление поставил оператор < для pait<,> Code: template <class T1, class T2> inline bool operator<(const pair<Tl,T2>& x, const pair<Tl,T2>& y) { return x.first < y.first || (!(y.first < x.first) && x.second < y.second); } на хрена оно сделано так, а не так Code: return x.first < y.first && x.second < y.second чета я не могу понять выгрыша в их операции, если кто поймет напишите плиз прям долсловно с примерами
есть элементарный код(вообщем этот код лишь для примера) : Code: char *test = "Test"; for(; *test; test++) *test = 't'; cout << test; при запуске в режиме отладки выдает такую ошибку: Необработанное исключение в "0x011e1e1d" в "nvm.exe": 0xC0000005: Нарушение прав доступа при записи "0x011eb858". Такое стало ооочень часто, практически все время когда нужно изменить память.. раньше не было. буду очень благодарен если помогут.. пробывал на Visual Studio C++ 2008 Express и на Visual Studio 2010
PHP: int main() { char text[5]; char *test = text; strcpy(test, "Test"); for(; *test; test++) *test = 't'; printf("%s", text); } Либо: PHP: int main() { char *text = new char[5]; char *test = text; strcpy(test, "Test"); for(; *test; test++) *test = 't'; printf("%s", text); delete[] text; } Вы пытаетесь изменить содержимое секции .rdata, которой студия ставит аттрибут исключительно "readable". Это нехорошо.
Ну, на самом деле секции .rdata можно добавить аттрибут writable, тогда такой код сработает, но это нехорошо, потому что при какой-нибудь ошибке можно будет затереть другие данные. А еще компилятор для оптимизации может одинаковые строки группировать в одну, чтобы меньше места на диске файл занял, тогда такое изменение вообще ни к чему хорошему не приведет.