Generische Klassenbibliothek - Bugs, Beschreibung, Fragen, Nutzungsmöglichkeiten und Vorschläge - Seite 34

 
Edgar Akhmadeev:
Wie unser Genosse Mao sagte: Lasst hundert Farben blühen.
Ich frage mich, ob die uuid übereinstimmt?

Die uuid wird nicht herausgegeben. Nur die Seriennummer der Karte. Die Erfahrung hat gezeigt, dass SMBIOS nicht für alle Boards Seriennummern ausgibt, während die uuid immer vorhanden ist und mit dem übereinstimmt, was Hardware-Analyse-Software (z.B. HWiNFO) ausgibt. Wie die Seriennummernvariante des Zauberers funktioniert, ist zu prüfen.

 

Ich habe herausgefunden, wie man die UUID erhält.

#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:

Offtopic, aber da Sie hier sind. Haben Sie das Market Watch-Fenster und das Fenster mit den aktuellen offenen Positionen/Aufträgen geschlossen?

 
fxsaber:

Offtopic, aber da Sie hier sind. Haben Sie das Fenster Market Watch und das Fenster mit den aktuellen offenen Positionen/Orders geschlossen?

Nein, habe ich nicht.

Ich glaube, Sie wissen, wie man die Griffe der Fenster öffnet.

Haben Sie versucht, ihnen eine WM_CLOSE-Nachricht zu senden?

 
Koldun Zloy:

Nein, das habe ich nicht.

Ich denke, Sie wissen, wie Sie die Griffe dieser Fenster bekommen.

Haben Sie versucht, ihnen eine WM_CLOSE-Nachricht zu senden?

Ich habe verschiedene Varianten ausprobiert, aber leider hat es aus irgendeinem Grund nicht funktioniert.

 
Bitte fügen Sie der Methode einen Const-Modifikator hinzu.
   bool              TryGetValue(TKey key,TValue &value) const;
 

Frage zu Kollisionen. Ist es möglich, in einem solchen Fall eine Kollision zu verursachen?

#include <Generic\HashMap.mqh>

CHashMap<ulong, int> Index;

Wenn 27.000 Einträge gemacht worden sind.

 
fxsaber:

Frage zu Kollisionen. Ist es möglich, in einem solchen Fall eine Kollision zu verursachen?

Wenn ulong ein Ticket ist, ja, aber mit einer sehr geringen Wahrscheinlichkeit

 
Andrei Trukhanovich:

wenn ulong ein Ticket ist, dann ja, aber mit einer sehr geringen Wahrscheinlichkeit

Das ist eine Eintrittskarte. Ich danke Ihnen für die Informationen.

 
fxsaber:

Frage zu Kollisionen. Ist es möglich, in einem solchen Fall eine Kollision zu verursachen?

Wenn 27.000 Einträge gemacht worden sind.

Das ist fast unmöglich, und wenn doch, ist der Zugang trotzdem sehr effizient.

Dies ist praktisch die effizienteste Methode der Adressierung. Auch auf die Gefahr hin, dass die Zugriffstabelle auf ungeheure Werte anwächst.
Grund der Beschwerde: