[ C / C++ ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. SeNaP

    SeNaP Elder - Старейшина

    Joined:
    7 Aug 2008
    Messages:
    378
    Likes Received:
    69
    Reputations:
    20
    спасиб, окошко появилось :)
    Как теперь вызвать допустим, regedit в win console app?

    DWORD WINAPI func(LPVOID)
    {
    system("regedit");
    return 1;
    }
    Все компилится, вот только regedit не вызывается
     
  2. Catbert

    Catbert Banned

    Joined:
    29 Jun 2010
    Messages:
    80
    Likes Received:
    27
    Reputations:
    10
    Попробуй по этому мануалу
     
  3. gLuk!

    gLuk! New Member

    Joined:
    27 Mar 2009
    Messages:
    27
    Likes Received:
    0
    Reputations:
    0
    irc

    Пытаюсь работать с irc через winsock. Вопрос скорее даже по irc протоколу...
    Код:
    PHP:
    //--------------------------------------------------------------------------- 
    #include <winsock.h> 
    #pragma hdrstop  
    //---------------------------------------------------------------------------  
    #pragma argsused 
    int main(int argccharargv[]) 

    WSADATA ws
    SOCKET s
    struct sockaddr_in servaddrclient
    char buf[MAX_PATH]; 
    WSAStartup (MAKEWORD(1,1), &ws); 

    socket(AF_INETSOCK_STREAM0); 
    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;"300, (struct sockaddr *)&servaddrsizeof(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
    //---------------------------------------------------------------------------
    [​IMG]
    PING не приходит. ВниманИе вапРос: ШО ДЕЛАТЬ? спс.
     
  4. greki_hoy

    greki_hoy Member

    Joined:
    4 Mar 2010
    Messages:
    326
    Likes Received:
    57
    Reputations:
    41
    2gLuk!
    http://en.pudn.com/search_db.asp?keyword=irc
     
  5. Lee_fx

    Lee_fx Elder - Старейшина

    Joined:
    27 Sep 2008
    Messages:
    90
    Likes Received:
    14
    Reputations:
    0
    это что за кракозябр?)
    Почитай RFC, вроде на русском даже был.

    По теме, нужно примерно так:
    "NICK botnickname\r\n"
    "USER botuser 8 * : Comment\r\n"
    Причем "\r\n" обязательны. Некоторые ирк сети помимо стандартный NICK и USER имеют свою авторизацию (прим. quakenet).
     
  6. R0nin

    R0nin Member

    Joined:
    11 Jul 2010
    Messages:
    261
    Likes Received:
    24
    Reputations:
    8
    твой код правильный, он должен работать, если на сервере правильно настроен cgi
     
  7. Guffi

    Guffi New Member

    Joined:
    6 Mar 2010
    Messages:
    14
    Likes Received:
    0
    Reputations:
    0
    Пытаюсь создать/открыть текстовый документ вполне необычным образом и дописать в него данные, ничего не получается..
    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);
    }
     
  8. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    В memory mapped файлы дописывать данные нельзя (точнее можно, но это бессмысленно и неудобно). Можно только читать или перезаписывать данные так, чтобы размер файла не менялся.
     
  9. Guffi

    Guffi New Member

    Joined:
    6 Mar 2010
    Messages:
    14
    Likes Received:
    0
    Reputations:
    0
    Понятно спасибо. Что посоветуешь тогда?
     
  10. greki_hoy

    greki_hoy Member

    Joined:
    4 Mar 2010
    Messages:
    326
    Likes Received:
    57
    Reputations:
    41
    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;
    }
    
    
     
    #5630 greki_hoy, 8 Sep 2010
    Last edited: 8 Sep 2010
    1 person likes this.
  11. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Ну я и говорю что неудобно) Размер новый может быть заранее неизвестен.

    Я бы посоветовал открыть файл для добавления данных, перейти в конец файла и дописать туда то, что необходимо. Даже если размер файла будет большим, это не займет много времени.
     
  12. greki_hoy

    greki_hoy Member

    Joined:
    4 Mar 2010
    Messages:
    326
    Likes Received:
    57
    Reputations:
    41
    интересно зачем это ТС'у :)
    смотрю сейчас CreateFileMapping сделает файл больше и если после MapViewOfFile потерпит неудачу надо по идее вернуть старый размер SetFilePointer SetEndOfFile меньше на AppendSize они в свою очередь тоже могут вернуть ошибку вообщем надо делать копию и оперировать копию если чуть чего восстанавливать старую копию
     
    #5632 greki_hoy, 9 Sep 2010
    Last edited: 9 Sep 2010
  13. Guffi

    Guffi New Member

    Joined:
    6 Mar 2010
    Messages:
    14
    Likes Received:
    0
    Reputations:
    0
    Сильно много пафоса в коде для обычного лога не правда?=)
    Спасибо справился) Просто эксперементирую с новыми способами..)
     
  14. cupper

    cupper Elder - Старейшина

    Joined:
    6 Jun 2007
    Messages:
    369
    Likes Received:
    92
    Reputations:
    5
    разбираюсь с 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
    
    чета я не могу понять выгрыша в их операции, если кто поймет напишите плиз прям долсловно с примерами
     
  15. olegarx

    olegarx New Member

    Joined:
    3 Sep 2010
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    есть элементарный код(вообщем этот код лишь для примера) :
    Code:
    	char *test = "Test";
    	for(; *test; test++)
    		*test = 't';
    	cout << test;
    при запуске в режиме отладки выдает такую ошибку:

    Необработанное исключение в "0x011e1e1d" в "nvm.exe": 0xC0000005: Нарушение прав доступа при записи "0x011eb858".

    Такое стало ооочень часто, практически все время когда нужно изменить память.. раньше не было. буду очень благодарен если помогут.. пробывал на Visual Studio C++ 2008 Express и на Visual Studio 2010
     
    #5635 olegarx, 10 Sep 2010
    Last edited: 10 Sep 2010
  16. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    PHP:
    int main()
    {
        
    char text[5];
        
    char *test text;

        
    strcpy(test"Test");

        for(; *
    testtest++)
            *
    test 't';
        
        
    printf("%s"text);
    }
    Либо:
    PHP:
    int main()
    {
        
    char *text = new char[5];

        
    char *test text;
        
    strcpy(test"Test");

        for(; *
    testtest++)
            *
    test 't';
        
        
    printf("%s"text);

        
    delete[] text;
    }
    Вы пытаетесь изменить содержимое секции .rdata, которой студия ставит аттрибут исключительно "readable". Это нехорошо.
     
    #5636 GRRRL Power, 10 Sep 2010
    Last edited: 10 Sep 2010
  17. olegarx

    olegarx New Member

    Joined:
    3 Sep 2010
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    вроде работает..
     
  18. cupper

    cupper Elder - Старейшина

    Joined:
    6 Jun 2007
    Messages:
    369
    Likes Received:
    92
    Reputations:
    5
    проще говоря "Test" это константа, а ты пытаешься ее изменить
     
  19. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Ну, на самом деле секции .rdata можно добавить аттрибут writable, тогда такой код сработает, но это нехорошо, потому что при какой-нибудь ошибке можно будет затереть другие данные. А еще компилятор для оптимизации может одинаковые строки группировать в одну, чтобы меньше места на диске файл занял, тогда такое изменение вообще ни к чему хорошему не приведет.
     
  20. SeNaP

    SeNaP Elder - Старейшина

    Joined:
    7 Aug 2008
    Messages:
    378
    Likes Received:
    69
    Reputations:
    20
    Подскажите книгу по win32 api для чайника.
     
Thread Status:
Not open for further replies.