Biblioteca de classes genéricas - bugs, descrição, perguntas, recursos de uso e sugestões - página 34

 
Edgar Akhmadeev:
Como disse o nosso camarada Mao: Que floresça uma centena de cores.
Será que o uuid coincide?

O uuid não é dado a conhecer. Apenas o número de série do quadro. A experiência tem mostrado que o SMBIOS não dá números de série para todas as placas, enquanto o uuid está sempre presente e corresponde ao que o software de análise de hardware (por exemplo, HWiNFO) dá. Como funciona a variante do número de série do feiticeiro é uma questão de verificação.

 

Descobriu como obter a 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:

Offtop, mas já que está aqui. Fechou a janela do Market Watch e a janela com as actuais posições/ordens abertas?

 
fxsaber:

Offtop, mas já que está aqui. Já fez o fecho da janela do Market Watch e da janela com as actuais posições/ordens abertas?

Não, não o fiz.

Penso que sabe como obter os puxadores dessas janelas.

Já tentou enviar-lhes uma mensagem WM_CLOSE?

 
Koldun Zloy:

Não, não o fiz.

Penso que sabe como obter os puxadores destas janelas.

Já tentou enviar-lhes a mensagem WM_CLOSE?

Tentei variantes diferentes, mas infelizmente não funcionou por alguma razão.

 
Por favor, adicione um modificador constante ao método.
   bool              TryGetValue(TKey key,TValue &value) const;
 

Pergunta sobre colisões. É possível entrar em colisão em tal caso?

#include <Generic\HashMap.mqh>

CHashMap<ulong, int> Index;

Se tiverem sido feitas 27.000 entradas.

 
fxsaber:

Pergunta sobre colisões. É possível entrar em colisão em tal caso?

Se ulong é um bilhete, sim, mas com uma probabilidade muito baixa

 
Andrei Trukhanovich:

se ulong é um bilhete, sim, mas com uma probabilidade muito pequena

É um bilhete. Obrigado pela informação.

 
fxsaber:

Pergunta sobre colisões. É possível entrar em colisão em tal caso?

Se tiverem sido feitas 27.000 entradas.

Quase impossível e, se o fizer, o acesso continua a ser super eficiente.

Este é praticamente o método mais eficiente de abordar. Com o risco de aumentar a tabela de acesso a valores monstruosos.