Libreria di classi generiche - bug, descrizione, domande, caratteristiche d'uso e suggerimenti - pagina 34

 
Edgar Akhmadeev:
Come diceva il nostro compagno Mao: Che fioriscano cento colori.
Mi chiedo se l'uuid corrisponde?

L'uuid non viene dato. Solo il numero di serie della scheda. L'esperienza ha dimostrato che SMBIOS non fornisce numeri di serie per tutte le schede, mentre l'uuid è sempre presente e corrisponde a quello che il software di analisi dell'hardware (ad esempio HWiNFO) fornisce. Come funziona la variante del numero di serie dello stregone è da verificare.

 

Ho scoperto come ottenere l'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, ma visto che sei qui. Avete chiuso la finestra di Market Watch e la finestra con le posizioni/ordini aperti attuali?

 
fxsaber:

Offtop, ma visto che sei qui. Avete fatto la chiusura della finestra di Market Watch e della finestra con le posizioni/ordini aperti attuali?

No, non l'ho fatto.

Credo che tu sappia come ottenere le maniglie di quelle finestre.

Avete provato a mandargli un messaggio WM_CLOSE?

 
Koldun Zloy:

No, non l'ho fatto.

Credo che tu sappia come ottenere le maniglie di queste finestre.

Avete provato a mandargli il messaggio WM_CLOSE?

Ho provato diverse varianti, ma purtroppo non ha funzionato per qualche motivo.

 
Si prega di aggiungere un modificatore const al metodo.
   bool              TryGetValue(TKey key,TValue &value) const;
 

Domanda sulle collisioni. È possibile incorrere in una collisione in un caso del genere?

#include <Generic\HashMap.mqh>

CHashMap<ulong, int> Index;

Se sono state fatte 27.000 iscrizioni.

 
fxsaber:

Domanda sulle collisioni. È possibile incorrere in una collisione in un caso del genere?

Se ulong è un biglietto, sì, ma con una probabilità molto bassa

 
Andrei Trukhanovich:

se ulong è un biglietto, allora sì, ma con una probabilità molto piccola

È un biglietto. Grazie per le informazioni.

 
fxsaber:

Domanda sulle collisioni. È possibile incorrere in una collisione in un caso del genere?

Se sono state fatte 27.000 iscrizioni.

Quasi impossibile e se lo fai, l'accesso è ancora super efficiente.

Questo è praticamente il metodo di indirizzamento più efficiente. A rischio di far crescere la tabella di accesso a valori mostruosi.