일반 클래스 라이브러리 - 버그, 설명, 질문, 사용 기능 및 제안 사항 - 페이지 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 :

주제가 아니지만 당신이 여기 있기 때문에. Market Watch 창과 현재 열려 있는 포지션/주문 이 있는 창을 닫으셨습니까?

 
fxsaber :

주제가 아니지만 당신이 여기 있기 때문에. Market Watch 창과 현재 열려 있는 포지션/주문 이 있는 창을 닫으셨습니까?

아니, 하지 않았다.

이 창의 핸들을 얻는 방법을 알고 있다고 생각합니다.

그들에게 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개의 레코드가 생성된 경우.

거의 불가능하고 문제가 발생하더라도 액세스는 여전히 매우 효과적입니다.

이것은 실질적으로 가장 효율적인 주소 지정 방법입니다. 엄청난 값을 가진 액세스 테이블이 커질 위험이 있습니다.