Библиотека Generic классов - ошибки, описание, вопросы, особенности использования и предложения - страница 34

 
Edgar Akhmadeev:
Как сказал наш товарищ Мао: Пусть цветут сто цветов.
Интересно, uuid совпадает?

uuid не выдаётся. Только серийный номер платы. Как показал опыт, SMBIOS не для всех плат выдаёт серийник, а uuid есть всегда, и он соответствует тому, что выдают программы анализа железа (напр. HWiNFO). Как у колдунского варианта с серийником - надо проверять.

 

Нашёл как получить UUID.

#define _WIN64  // Only for a 64-bit terminal!

#include <WbemCli.mqh>
//+-----------------------------------------------------------------------------------------------+
//| Script program start function                                                                 |
//+-----------------------------------------------------------------------------------------------+
void OnStart()
{
   HRESULT result = CoInitialize( 0 );
   if( result == S_OK ){
      lpWbemLocator pLoc;
      result = CoCreateInstance( CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, pLoc.mInterface );
      if( result == S_OK ){
         lpWbemServices pSvc;
         result = pLoc.ConnectServer( "root\\CimV2", "", "", "", pSvc );
         if( result == S_OK ){
            result = CoSetProxyBlanket( pSvc.mInterface, RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE, 0, RPC_C_AUTHN_LEVEL_CALL, RPC_C_IMP_LEVEL_IMPERSONATE, 0, EOAC_NONE );
            if( result == S_OK ){
               lpEnumWbemClassObject pEnumerator;
               // Получаем UUID.
               result = pSvc.ExecQuery( "SELECT * FROM Win32_ComputerSystemProduct", pEnumerator );
               if( result == S_OK ){
                  uint uReturn = 0;
                  while( result == S_OK ){
                     lpWbemClassObject pclsObj;
                     result = pEnumerator.Next( pclsObj, uReturn );
                     if( uReturn == 0 ){
                        result = S_OK;
                        break;
                     }
                     Variant vtProp;
                     result = pclsObj.Get( "UUID", vtProp );
                     if( result == S_OK ){
                        Print( "UUID", ": ", vtProp.toString() );
                     }
                     pclsObj.Release();
                  }
               }
               
            }
            pSvc.Release();
         }
         pLoc.Release();
      }
      CoUninitialize();
   }
   if( result != S_OK ){
      ushort shortArray[256];
      uint len = FormatMessageW( FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS, 0, result, Lcid, shortArray, 256, 0 );
      string strError = ShortArrayToString( shortArray );
      Print( strError );
   }
}
//+-----------------------------------------------------------------------------------------------+
 
Koldun Zloy:

Оффтоп, но раз уж Вы здесь. Делали закрытие окна Обзора рынка и окна с текущими открытыми позициями/ордерами?

 
fxsaber:

Оффтоп, но раз уж Вы здесь. Делали закрытие окна Обзора рынка и окна с текущими открытыми позициями/ордерами?

Нет не делал.

Думаю что Вы знаете как получить хэндлы этих окон.

Пробовали посылать им сообщение WM_CLOSE?

 
Koldun Zloy:

Нет не делал.

Думаю что Вы знаете как получить хэндлы этих окон.

Пробовали посылать им сообщение WM_CLOSE?

Пробовал различные варианты, но, к сожалению, почему-то не выходило.

 
Просьба добавить модификатор const в метод.
   bool              TryGetValue(TKey key,TValue &value) const;
 

Вопрос по коллизиям. Возможно ли нарваться на коллизию в таком случае?

#include <Generic\HashMap.mqh>

CHashMap<ulong, int> Index;

Если было произведено 27 000 записей.

 
fxsaber:

Вопрос по коллизиям. Возможно ли нарваться на коллизию в таком случае?

если ulong это тикет, то да, но с очень маленькой вероятностью

 
Andrei Trukhanovich:

если ulong это тикет, то да, но с очень маленькой вероятностью

Это тикет. Спасибо за информацию.

 
fxsaber:

Вопрос по коллизиям. Возможно ли нарваться на коллизию в таком случае?

Если было произведено 27 000 записей.

Почти невозможно и если нарветесь, доступ все равно сверх эффективный.

Это практически самый эффективный метод адресации. С риском роста таблицы доступа при чудовищных значениях.