Biblioteca de clases genéricas - errores, descripción, preguntas, características de uso y sugerencias - página 34

 
Edgar Akhmadeev:
Como dijo nuestro camarada Mao: Que florezcan cien colores.
¿Me pregunto si el uuid coincide?

El uuid no se da. Sólo el número de serie de la placa. La experiencia ha demostrado que SMBIOS no da los números de serie de todas las placas, mientras que el uuid siempre está presente y coincide con lo que da el software de análisis de hardware (por ejemplo, HWiNFO). Hay que comprobar cómo funciona la variante del número de serie del brujo.

 

Descubrí cómo obtener el 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, pero ya que estás aquí. ¿Ha cerrado la ventana de observación del mercado y la ventana con las posiciones/órdenes abiertas actuales?

 
fxsaber:

Offtop, pero ya que estás aquí. ¿Ha realizado el cierre de la ventana de Observación del Mercado y de la ventana con las posiciones/órdenes abiertas actuales?

No, no lo hice.

Creo que sabes cómo conseguir las manillas de esas ventanas.

¿Has probado a enviarles un mensaje WM_CLOSE?

 
Koldun Zloy:

No, no lo hice.

Creo que sabes cómo conseguir las manillas de estas ventanas.

¿Has probado a enviarles el mensaje WM_CLOSE?

Intenté diferentes variantes, pero desafortunadamente no funcionó por alguna razón.

 
Por favor, añada un modificador const al método.
   bool              TryGetValue(TKey key,TValue &value) const;
 

Pregunta sobre las colisiones. ¿Es posible que se produzca una colisión en ese caso?

#include <Generic\HashMap.mqh>

CHashMap<ulong, int> Index;

Si se han hecho 27.000 entradas.

 
fxsaber:

Pregunta sobre las colisiones. ¿Es posible que se produzca una colisión en ese caso?

Si ulong es un billete, sí, pero con una probabilidad muy baja

 
Andrei Trukhanovich:

si ulong es un billete, sí, pero con una probabilidad muy pequeña

Es un billete. Gracias por la información.

 
fxsaber:

Pregunta sobre las colisiones. ¿Es posible que se produzca una colisión en ese caso?

Si se han hecho 27.000 entradas.

Casi imposible y si lo haces, el acceso sigue siendo súper eficiente.

Este es prácticamente el método más eficaz de direccionamiento. A riesgo de hacer crecer la tabla de acceso a valores monstruosos.