通用类库 - 错误、说明、问题、使用功能和建议 - 页 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个条目。

几乎不可能,如果你这样做,访问仍然是超级有效的。

这实际上是最有效的寻址方法。冒着将访问表增长到畸形值的风险。