[ 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. Darth Padla

    Darth Padla Member

    Joined:
    21 Jun 2010
    Messages:
    141
    Likes Received:
    25
    Reputations:
    8
    GNU GCC Compiler у меня там написано
     
  2. mrDebian

    mrDebian Member

    Joined:
    27 Jan 2013
    Messages:
    96
    Likes Received:
    13
    Reputations:
    10
    Так это же вроде виндовая либа. Попробуй скачай mingw и им компиль.
     
  3. 0xd098d0b3d0

    0xd098d0b3d0 New Member

    Joined:
    26 Oct 2012
    Messages:
    54
    Likes Received:
    1
    Reputations:
    0
    Ребят, подскажите возможно сделать так.
    У меня программа, кликает мышкой по заданным заранее координатам экрана, то есть по тому окну которое Ontop в момент щелчка.
    И пользоваться другими программами, смотреть видео и т.п. не представляется возможным в это время, реально ли сделать так, чтобы он щелкал в фоновом режиме, ну или по окну которое не ontop?
     
  4. mrDebian

    mrDebian Member

    Joined:
    27 Jan 2013
    Messages:
    96
    Likes Received:
    13
    Reputations:
    10
    Почитай http://msdn.microsoft.com/en-us/library/windows/desktop/ms645607(v=vs.85).aspx

    А именно:
     
    #7604 mrDebian, 5 Feb 2013
    Last edited: 5 Feb 2013
    1 person likes this.
  5. 0xd098d0b3d0

    0xd098d0b3d0 New Member

    Joined:
    26 Oct 2012
    Messages:
    54
    Likes Received:
    1
    Reputations:
    0
    Ну блин, это вроде щелчки курсором относительно окна приложения. Если я правильно понял.
    А нельзя ли допустим отловить приложение, и щелкать в нем мышкой, при том, что окна приложения не видно на экране? (Оно не свернуто, просто под другими окнами, других приложений.)
     
  6. mrDebian

    mrDebian Member

    Joined:
    27 Jan 2013
    Messages:
    96
    Likes Received:
    13
    Reputations:
    10
    Тоже самое. Найди хэндл окна и посылай ему сообщения сколько угодно.
     
  7. Darth Padla

    Darth Padla Member

    Joined:
    21 Jun 2010
    Messages:
    141
    Likes Received:
    25
    Reputations:
    8
    Code:
    #include <iostream>
    #include "stdafx.h"
    #include <windows.h>
    #include <mmdeviceapi.h>
    #include <endpointvolume.h>
    using namespace System;
    int main(){
      CoInitialize(NULL);
      return 0;
    }
    ->
    Code:
    1>хх.obj : error LNK2028: ссылка на неразрешенную лексему (0A00001E) "extern "C" long __stdcall CoInitialize(void *)" (?CoInitialize@@$$J14YGJPAX@Z) в функции "int __cdecl main(void)" (?main@@$$HYAHXZ)
    1>хх.obj : error LNK2019: ссылка на неразрешенный внешний символ "extern "C" long __stdcall CoInitialize(void *)" (?CoInitialize@@$$J14YGJPAX@Z) в функции "int __cdecl main(void)" (?main@@$$HYAHXZ)
    WTF??
     
  8. Eich3

    Eich3 Member

    Joined:
    27 Jan 2013
    Messages:
    22
    Likes Received:
    7
    Reputations:
    5
    Darth Padla, компоновщик не смог найти код для CoInitialize. Вероятно не подключена нужная библиотека.

    добавь ole32.lib в зависимости при линковке (прописать её в Linker -> Input -> Additional Dependencies свойств проекта).
     
    1 person likes this.
  9. DeepBlue7

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

    Joined:
    2 Jan 2009
    Messages:
    359
    Likes Received:
    50
    Reputations:
    12
    Помогите разобратся как получить правильную длину массива байт

    Code:
    #include <iostream>
    #include <Windows.h>
    #define ARRAY_LENGTH(array) (sizeof(array)/sizeof((array)[0]))
    
    struct fek
    {
    	DWORD* offsets;
    	BYTE** bytes;
    
    	fek()
    	{
    		offsets = (DWORD*) malloc(100);
    		bytes = (BYTE**) malloc(300);
    	}
    };
    
    int main()
    {
    	fek *fuk = new fek();
    	BYTE bytez[6] = { 0x33, 0x44, 0x77, 0x55, 0x81, 0x90 };
    	fuk -> offsets[0] = 0x4444444;
    	fuk -> bytes[0] = (BYTE*)bytez;
    	
    	printf("offsets [0]: %X\n", fuk -> offsets[0]);
    	
    	int len = ARRAY_LENGTH(fuk -> bytes[0]); //неправильно 
    
    	printf("Len: %d\n", len);
    
    	for(int i = 0; i < len; i++)
    	{
    		printf("0x%X\n", (BYTE*)fuk -> bytes[0][i]);
    	}
    getchar();
    return 0;
    }
    
    Подскажите, как же это делается :).
     
    #7609 DeepBlue7, 7 Feb 2013
    Last edited: 7 Feb 2013
  10. Eich3

    Eich3 Member

    Joined:
    27 Jan 2013
    Messages:
    22
    Likes Received:
    7
    Reputations:
    5
    DeepBlue7 sizeof не работает с памятью, выделенной через malloc, поскольку оно возвращает указатель типа void*, не сохраняющий информацию о размере типа. Вместо этого у тебя возвращается размер указателя (4 байта, 32bit mode).

    Есть решение: объявить компилятору, что указатель идет на массив конкретного размера, память под который будет выделена в рантайме. Вот пример кода:

    Code:
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    
    
    int main()
    {
       char one[] = "Hello";
       [COLOR=Yellow]char(*two)[100][/COLOR] = (char(*)[100])malloc(100);
       strncpy((char*)two, "World!", 99);
       printf("sizeof(one) = %d\nsizeof(*two) = %d", sizeof(one), sizeof([COLOR=Red]*[/COLOR]two));
       return 0;
    }
    
    Но практического смысла в данном коде, имхо нет. Памяти нынче достаточно чтобы хранить длины буферов прямо в структурах, а в C++ сам автор языка (Страуструп) рекомендует по минимуму использовать родные массивы языка, предпочитая им std::vector.

    К слову, вектор работает также быстро как и нативный массив, если ему зарезервировать память перед использованием методом reserve.
     
    #7610 Eich3, 8 Feb 2013
    Last edited: 9 Feb 2013
    1 person likes this.
  11. DeepBlue7

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

    Joined:
    2 Jan 2009
    Messages:
    359
    Likes Received:
    50
    Reputations:
    12
    c++

    Вопрос...

    Пишу дллку (хукаю в другой процесс), необходимо перезаписать оффсет на который следует прыгнуть инструкцией jmp.

    Сугубо для примера:
    Code:
    00381BFD   . C3             RETN
    00381BFE > $ E8 46050000    CALL 00382149
    00381C03   .^E9 B3FDFFFF    JMP 003819BB //изменить 0x003819bb на 0x13371337
    00381C08 >   8BFF           MOV EDI,EDI
    
    Собственно, в функцию передаю 2 параметра - DWORD from, DWORD to...
    Я так понимаю, надо вычислять относительный оффсет... но вот как - подскажите, пожалуйста.
     
  12. Darth Padla

    Darth Padla Member

    Joined:
    21 Jun 2010
    Messages:
    141
    Likes Received:
    25
    Reputations:
    8
    Вопрос 1 - как преобразовать HRESULT в читабельный вид?или хотя бы где посмотреть.
    cout<<hr выдает
    Вопрос 2 -
    почему GetMute и GetMasterVolume выдают unknown error,а SetMute работает?
    [​IMG]
    Code:
    	BOOL *mute;
    	hr=pVolume->GetMute(mute);
    	switch(hr){
    		case E_POINTER:
    		cout<<"Parameter pbMute is NULL.";
    		break;
    		case AUDCLNT_E_DEVICE_INVALIDATED:
    		cout<<"The audio endpoint device has been unplugged, or the audio hardware or associated hardware resources have been reconfigured, disabled, removed, or otherwise made unavailable for use.";
    		break;
    		case AUDCLNT_E_SERVICE_NOT_RUNNING:
    		cout<<"The Windows audio service is not running.";
    		break;
    		case S_OK:
    		cout<<"GetMute - no errors";
    		break;
    		default:
    		cout<<"GetMute - unknown error"<<hr<<endl;
    	}
    	cout<<"Mute - "<<mute<<endl;
    	
    	float *MastVol;
    	hr=pVolume->GetMasterVolume(MastVol);
    	switch(hr){
    		case E_POINTER:
    		cout<<"Parameter pbMute is NULL.";
    		break;
    		case AUDCLNT_E_DEVICE_INVALIDATED:
    		cout<<"The audio endpoint device has been unplugged, or the audio hardware or associated hardware resources have been reconfigured, disabled, removed, or otherwise made unavailable for use.";
    		break;
    		case AUDCLNT_E_SERVICE_NOT_RUNNING:
    		cout<<"The Windows audio service is not running.";
    		break;
    		case S_OK:
    		cout<<"GetMasterVolume - no errors";
    		break;
    		default:
    		cout<<"GetMasterVolume - unknown error"<<endl;
    	}
    	cout<<"Master Volume - "<<MastVol<<endl;
    	hr=pVolume->SetMute(1,NULL);
    	switch(hr){
    		case AUDCLNT_E_DEVICE_INVALIDATED:
    		cout<<"The audio endpoint device has been unplugged, or the audio hardware or associated hardware resources have been reconfigured, disabled, removed, or otherwise made unavailable for use.";
    		break;
    		case AUDCLNT_E_SERVICE_NOT_RUNNING:
    		cout<<"The Windows audio service is not running.";
    		break;
    		case S_OK:
    		cout<<"setmute - no errors";
    		break;
    		default:
    		cout<<"setmute - unknown error"<<endl;
    	}
    http://msdn.microsoft.com/en-us/library/windows/desktop/dd316531

    Вопрос 3 - как на этом форуме вставить спойлер?
    это
    и
    это
    не работают..
     
    #7612 Darth Padla, 11 Feb 2013
    Last edited: 11 Feb 2013
  13. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    1. Погуглить. http://goo.gl/ls21D
    2. Потому что передаешь указатель, на непойми куда.
    3. Кто сказал, что на этом форуме есть spoiler?
     
    _________________________
  14. Plaxxx

    Plaxxx New Member

    Joined:
    1 Nov 2008
    Messages:
    14
    Likes Received:
    0
    Reputations:
    0
    Исходник ftp

    Подскажите где можно взять исходник примитивного FTP сервера?
     
  15. DeepBlue7

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

    Joined:
    2 Jan 2009
    Messages:
    359
    Likes Received:
    50
    Reputations:
    12
    http://www.example-code.com/vcpp/ftp.asp
     
  16. Sifon110

    Sifon110 New Member

    Joined:
    13 Mar 2011
    Messages:
    34
    Likes Received:
    1
    Reputations:
    0
    Code:
    double p,  x = 2.0, y = 3.0;
    
    p = log(x)-exp(x+y)/sqrt(2.0)+pow(x,2)+abs(pow(x,3)-ln(y));
    printf("%f",p);
    
    
    Пишет индификатор ln не определен. Подскажите пожалуйста в чем ошибка.
     
  17. Spot

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

    Joined:
    1 Mar 2007
    Messages:
    461
    Likes Received:
    38
    Reputations:
    1
    Нету ln в math.h , вместо это log().
     
  18. yarbabin

    yarbabin HACKIN YO KUT

    Joined:
    21 Nov 2007
    Messages:
    1,663
    Likes Received:
    916
    Reputations:
    363
    какая библиотека подойдет для работы с изображения?
    конкретнее — jpg, еще конкретнее — склейка изображений.
    http://www.imagemagick.org/Magick++/ не особо удобен, да и готов выслушать альтернативы
     
    _________________________
    1 person likes this.
  19. 0o Chris o0

    0o Chris o0 New Member

    Joined:
    16 Oct 2011
    Messages:
    142
    Likes Received:
    1
    Reputations:
    0
    Возникла проблема с boost regex. Беру код отсюда http://habrahabr.ru/post/64226/
    Code:
    #include <iostream>
    #include <boost/regex.hpp>
    
    using namespace std;
    
    
    int main () {
    std::string xStr("The boost library has a great opportunity for the regex!");
    boost::regex xRegEx("\\b(?:\\w+?)((\\w)\\2)(?:\\w+?)\\b");
    boost::smatch xResults;
    std::cout << "==========================Results============================== \n";
    std::string::const_iterator xItStart = xStr.begin();
    std::string::const_iterator xItEnd = xStr.end();
    while( boost::regex_search(xItStart, xItEnd, xResults, xRegEx) )
    {
      std::cout << "Word, we've searched, is \"" << xResults[0] << "\". It has two \"" << xResults[2] << "\" inside itself.\n";
      xItStart = xResults[1].second;
    }
    return 0;
    }
    
    Компилируется нормально, но в отчете есть такая строка:
    Code:
    LINK : не найден или не выполнена сборка c:\documents and settings\admin\мои документы\visual studio 2010\Projects\boost_test\Debug\boost_test.exe при последней инкрементной компоновке; выполняется полная компоновка
    
    Это нормально?

    Также программа ничего не выводит, а отладчик выкидывает такое:
    Code:
    "boost_test.exe": Загружено: "C:\Documents and Settings\Admin\Мои документы\Visual Studio 2010\Projects\boost_test\Debug\boost_test.exe", Символы загружены.
    "boost_test.exe": Загружено: "C:\WINDOWS\system32\ntdll.dll", Невозможно найти или открыть файл PDB
    "boost_test.exe": Загружено: "C:\WINDOWS\system32\kernel32.dll", Невозможно найти или открыть файл PDB
    "boost_test.exe": Загружено: "C:\WINDOWS\system32\msvcp100d.dll", Символы загружены.
    "boost_test.exe": Загружено: "C:\WINDOWS\system32\msvcr100d.dll", Символы загружены.
    "boost_test.exe": Загружено: "C:\WINDOWS\system32\user32.dll", Невозможно найти или открыть файл PDB
    "boost_test.exe": Загружено: "C:\WINDOWS\system32\gdi32.dll", Невозможно найти или открыть файл PDB
    "boost_test.exe": Загружено: "C:\WINDOWS\system32\imm32.dll", Невозможно найти или открыть файл PDB
    "boost_test.exe": Загружено: "C:\WINDOWS\system32\advapi32.dll", Невозможно найти или открыть файл PDB
    "boost_test.exe": Загружено: "C:\WINDOWS\system32\rpcrt4.dll", Невозможно найти или открыть файл PDB
    "boost_test.exe": Загружено: "C:\WINDOWS\system32\secur32.dll", Невозможно найти или открыть файл PDB
    "boost_test.exe": Загружено: "C:\WINDOWS\system32\lpk.dll", Невозможно найти или открыть файл PDB
    "boost_test.exe": Загружено: "C:\WINDOWS\system32\usp10.dll", Невозможно найти или открыть файл PDB
    "boost_test.exe": Загружено: "C:\Program Files\Agnitum\Outpost Firewall Pro\wl_hook.dll", Невозможно найти или открыть файл PDB
    "boost_test.exe": Загружено: "C:\WINDOWS\system32\shell32.dll", Невозможно найти или открыть файл PDB
    "boost_test.exe": Загружено: "C:\WINDOWS\system32\msvcrt.dll", Невозможно найти или открыть файл PDB
    "boost_test.exe": Загружено: "C:\WINDOWS\system32\shlwapi.dll", Невозможно найти или открыть файл PDB
    "boost_test.exe": Загружено: "C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.6028_x-ww_61e65202\comctl32.dll", Невозможно найти или открыть файл PDB
    "boost_test.exe": Загружено: "C:\WINDOWS\system32\comctl32.dll", Невозможно найти или открыть файл PDB
    
    И такой вывод для любого случая. Даже в таком примере:
    Code:
    #include <iostream>
    #include <boost/regex.hpp>
    
    using namespace std;
    
    
    int main () {
        char test[] = "text text";
        boost::cmatch m;
    	boost::regex exp("(\\S+");
    if ( boost::regex_match( test, m, exp ) ) {
        int sz = m.size(); 
        for ( int i = 0; i < sz; ++ i )
            std::cout << std::string( m[i].first, m[i].second ) << std::endl;
    }
        return 0;
    }
    
     
    #7619 0o Chris o0, 26 Feb 2013
    Last edited: 26 Feb 2013
  20. GRRRL Power

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

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Это нормально. Программа линкуется и запускается, просто консоль открывается и сразу закрывается, поэтому ты не видишь результата выполнения программы. Можешь запустить из-под консоли или через Ctrl+F5 в студии, либо поставить брейкпоинт на конец программы и посмотреть вывод.
     
Thread Status:
Not open for further replies.