Форум трейдеров » Торговые стратегии » Бета-тестинг
+ Подписаться
Страница 16 из 58 ПерваяПервая ... 6141516171826 ... ПоследняяПоследняя
  1. 2,947
    Комментарии
    17
    Темы
    2950
    Репутация Pro
    Аватар для Mr.WT  
    Мастер форумных наук

    5 Медалей
    Цитата Сообщение от smakaev Посмотреть сообщение
    Mr.WT

    новый пакет не готов еще?
    Нет, к сожалению нет...
    Просто забот слишком много.
    Но обещаю - будет!
  2. 356
    Комментарии
    2
    Темы
    356
    Репутация Pro
    Аватар для Stoic  
    В начале пути

    2 Медалей
    Цитата Сообщение от Mr.WT Посмотреть сообщение
    ...Виста окажется в опале. Да. Извините, все претензии - к дяде Биллу.
    А дядя Билл ответил так:
     
  3. 2,947
    Комментарии
    17
    Темы
    2950
    Репутация Pro
    Аватар для Mr.WT  
    Мастер форумных наук

    5 Медалей
    Цитата Сообщение от Stoic Посмотреть сообщение
    А дядя Билл ответил так:
    Ну спасибо, Стоик, я уж от души посмеялся!!!! :D
  4. 80
    Комментарии
    2
    Темы
    84
    Репутация Pro
     
    В начале пути

    2 Медалей
    Цитата Сообщение от Mr.WT Посмотреть сообщение
    Ну спасибо, Стоик, я уж от души посмеялся!!!! :D
    +1 :thumbsup_002:
    Я тоже давно так не смеялся! :D
  5. 2,947
    Комментарии
    17
    Темы
    2950
    Репутация Pro
    Аватар для Mr.WT  
    Мастер форумных наук

    5 Медалей
    Вот! Ура! Нашёл диск с Вистой с первым сервиспаком. Сегодня-завтра заинсталлирую на админский комп, чтоб ему помучиться было с чем :D
    А там уж разберёмся, куда она ран-таймы прячет, животное этакое...
  6. 66
    Комментарии
    1
    Темы
    66
    Репутация Pro
     
    sculptor

    2 Медалей
    Цитата Сообщение от Mr.WT Посмотреть сообщение
    Код:
    char * hwid_buf = new char[BUF_SIZE];
    char * (__stdcall * GetHardwareID)(BOOL, BOOL, BOOL, BOOL, char*);
    char * RegCode = "ABCD-ABCD";
    HINSTANCE DllInst = NULL;
    DllInst = LoadLibrary("HWID.dll");
    GetHardwareID = (char * (__stdcall *)(BOOL, BOOL, BOOL, BOOL, char*))  
                                  GetProcAddress(DllInst,"GetHardwareID");
    hwid_buf = GetHardwareID(TRUE, FALSE, TRUE, TRUE, RegCode);
    Этот код с ошибкой - утечка памяти. Впервой строчке Вы выделяете память, в последней затираете указатель на эту область, повнимательнее нужно быть.


    Цитата Сообщение от Mr.WT Посмотреть сообщение
    Код:
    int Get_HWInfo(char * buf) 
    {
    	char* (__stdcall *GetHardwareID)(BOOL, BOOL, BOOL, BOOL, char*);
    	char* RegCode = "ABCD-ABCD";
    	char* p = NULL;
    	HINSTANCE DllInst = NULL;
    	DllInst = LoadLibrary("HWID.dll");
    	GetHardwareID = (char* (__stdcall*)(BOOL, BOOL, BOOL, BOOL, char*))GetProcAddress(DllInst,"GetHardwareID");
    
    	p = GetHardwareID(TRUE, FALSE, TRUE, TRUE, RegCode);
    	if( strlen(p) != 19 ) return(5);
     	memmove(buf,p,20);
    	return(0);
    }
    Внес небольшую правку, теперь будет работать, но в продукт-релизе конечно такой код использовать нельзя. Ф-ция GetHardwareID возвращает указатель на зануленную строку в стеке, засада наверно в этом).
  7. 2,947
    Комментарии
    17
    Темы
    2950
    Репутация Pro
    Аватар для Mr.WT  
    Мастер форумных наук

    5 Медалей
    [QUOTE=+++;346489]Этот код с ошибкой - утечка памяти. Впервой строчке Вы выделяете память, в последней затираете указатель на эту область, повнимательнее нужно быть.

    Да, верно, предыдущий адрес мы здесь теряем, выделенная память остаётся "бесхозной". Через memmove и добавочный пойнтер наверное действительно должно работать и без утечки, и без потери данных. Заработался :D
    Однако, если подумать ещё, то всё равно остаётся непонятным поведение компилятора. Дело в том, что соответствующая функция явно определена как возвращающая строку. Компилятору было дано указание преобразовать всё это дело в пойнтер соответствующего типа и поместить адрес в нужную переменную. Утечка утечкой, но почему данные при этом теряются, всё таки не понятно... Вот строка, вот переменная, вот компилятор получает адрес строки и помещает его в переменную... Да, видно, что выделенная ранее память при этом теряется, но куда деваются данные по новому адресу?
  8. 2,947
    Комментарии
    17
    Темы
    2950
    Репутация Pro
    Аватар для Mr.WT  
    Мастер форумных наук

    5 Медалей
    Цитата Сообщение от +++ Посмотреть сообщение

    Внес небольшую правку, теперь будет работать, но в продукт-релизе конечно такой код использовать нельзя.
    А вот, кстати, официальный пример из релиза библиотеки, содержащий функцию "добычи" идентификатора компа:
    Код:
    char* (__stdcall *GetHardwareID)(BOOL, BOOL, BOOL, BOOL, char*);
    HINSTANCE DllInst = NULL;
    char* RegCode = "xxxx-xxxx";
    
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
      if (DllInst == NULL) DllInst = LoadLibrary("HardwareID.dll");
      if (DllInst)
      {
        GetHardwareID = (char* (__stdcall*)(BOOL, BOOL, BOOL, BOOL, char*))GetProcAddress(DllInst,"GetHardwareID");
        //Call GetHardwareID
        Edit1->Text = GetHardwareID(cbHDD->Checked, cbNIC->Checked, cbCPU->Checked, cbBIOS->Checked, RegCode);
      }
    }
  9. 2,947
    Комментарии
    17
    Темы
    2950
    Репутация Pro
    Аватар для Mr.WT  
    Мастер форумных наук

    5 Медалей
    Цитата Сообщение от +++ Посмотреть сообщение
    Внес небольшую правку
    А здесь можно вовсе обойтись без дополнительной переменной "р"
    Просто сделать так, так конечно работает:
    Код:
    	memmove(buf, GetHardwareID(TRUE, FALSE, TRUE, TRUE, RegCode), 20);
    	if( strlen(buf) != 19 ) return(5);
  10. 2,947
    Комментарии
    17
    Темы
    2950
    Репутация Pro
    Аватар для Mr.WT  
    Мастер форумных наук

    5 Медалей
    Sempfid, я уже пару дней жду от вас ответа, а может и больше. Вернитесь в трейдерскую жизнь :)

    Господа, ВСЕ у кого имеются проблемы с комплексом - СРОЧНО описывайте их прямо здесь. Если подобная проблема уже была описана, всё равно так и говорите - я имею вот такую-то проблему, уже оговоренную ранее.

    Если вы все будете молчать, нам придётся специально оговорить условия использования - вообще только вин2000 и первые версии ХР :D

Вверх
РегистрацияX

чтобы писать, читать, комментировать