mql5 언어의 특징, 미묘함 및 작업 방법 - 페이지 198

 
Vladimir Simakov :
업데이트: x86 아키텍처에서 - cpuid 프로세서 명령. msvs에는 __cpuid(int[4],int) 및 __cpuidex(int[4],int,int)가 있습니다. 인터넷에 예제가 있습니다.

프로세서 정보를 포기하기로 결정했습니다. 명확한 정보가 표시되지 않습니다.

전체 장치의 수를 결정할 방법이 없기 때문에 디스크 또는 파티션에서 멈췄습니다.

한 가지 의심스러운 점은 데이터 유형 이 올바르게 입력되었습니까?

 #property strict

#import "kernel32.dll"
bool GetVolumeInformationW( string RootPathName,
                           ushort VolumeNameBuffer,
                           uint VolumeNameSize,
                           uint &VolumeSerialNumber[],
                           uint MaximumComponentLength,
                           uint FileSystemFlags,
                           ushort FileSystemNameBuffer,
                           uint FileSystemNameSize);
#import
//+------------------------------------------------------------------+
void OnStart ()
  {
   Print (SystemDriveSerialNumber( "C" ));
//---
  }
//+------------------------------------------------------------------+

//-------------------------------------------------------------------------------------------------------------------
string SystemDriveSerialNumber( string sDrive)
  {
   uint iVolumeSerialNumber[ 1 ]= { 0 };
   string sVolumeSerialNumber= "" ;
   if (GetVolumeInformationW( "C:\\" , NULL , 15 , iVolumeSerialNumber, 0 , 0 , NULL , 15 ))
     {
      sVolumeSerialNumber=IntegerToHexString(iVolumeSerialNumber[ 0 ]);
      sVolumeSerialNumber= StringSubstr (sVolumeSerialNumber, 0 , 4 )+ "-" + StringSubstr (sVolumeSerialNumber, 4 );
     }
   return (sVolumeSerialNumber);
  }
//+--------------------------------
string IntegerToHexString( uint num)
  {
   char __hex[]= { '0' , '1' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' , 'A' , 'B' , 'C' , 'D' , 'E' , 'F' };
   int len= 0 ,k= 0 ;
   char buff[ 64 ];
   do
     {
       uint n=num& 0xF ;
      buff[len] = __hex[n];
      len++;
      num>>= 4 ;
     }
   while (num!= 0 );

   for (; k<len/ 2 ; k++)
     {
      buff[k]^=buff[len-k- 1 ];
      buff[len-k- 1 ]^=buff[k];
      buff[k]^=buff[len-k- 1 ];
     }
   return CharArrayToString (buff, 0 ,len);
  }
//+------------------------------------------------------------------+
 
Vitaly Muzichenko :

프로세서 정보를 포기하기로 결정했습니다. 명확한 정보가 표시되지 않습니다.

전체 장치의 수를 결정할 방법이 없기 때문에 디스크 또는 파티션에서 멈췄습니다.

한 가지 의심스러운 점은 데이터 유형 이 올바르게 입력되었습니까?

마더보드 아이디가 맞습니다.

 
Valeriy Yastremskiy :

마더보드 아이디가 맞습니다.

코드 예제가 있습니까?

 
Vitaly Muzichenko :

코드 예제가 있습니까?

보드의 일련 번호를 µl로 얻는 방법을 찾지 못했습니다.

wmic 베이스보드는 일련번호를 얻습니다.

cmd에서

 
Valeriy Yastremskiy :

보드의 일련 번호를 µl로 얻는 방법을 찾지 못했습니다.

wmic 베이스보드는 일련번호를 얻습니다.

cmd에서

나도 찾지 못했다.

 
Vitaly Muzichenko :
...

한 가지 의심스러운 점은 데이터 유형 이 올바르게 입력되었습니까?

 #define BOOL bool
#define LPWSTR string &
#define LPCWSTR const LPWSTR
#define DWORD uint
#define LPDWORD DWORD&

BOOL GetVolumeInformationW(
  LPCWSTR lpRootPathName,
  LPWSTR  lpVolumeNameBuffer,
  DWORD   nVolumeNameSize,
  LPDWORD lpVolumeSerialNumber,
  LPDWORD lpMaximumComponentLength,
  LPDWORD lpFileSystemFlags,
  LPWSTR  lpFileSystemNameBuffer,
  DWORD   nFileSystemNameSize
);

이 같은)

upd: mql 서명에 맞게 조정됨

 
Vladimir Simakov :

이 같은)

upd: mql 서명에 맞게 조정됨

유형을 즉시 함수에 입력하고 코드를 늘리지 않을 수 있다면 #define 구성을 한 번 적용하는 요점이 무엇입니까?

 
Vitaly Muzichenko :

유형을 즉시 함수에 입력하고 코드를 늘리지 않을 수 있다면 #define 구성을 한 번 적용하는 요점이 무엇입니까?

이는 WinAPI 기능의 기본 서명을 애도 및/또는 사용할 수 있음을 의미합니다.

 
Igor Makanu :

이는 WinAPI 기능의 기본 서명을 애도 및/또는 사용할 수 있음을 의미합니다.

가능하지만 그것이 질문입니다.

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

mql5 언어의 특징, 미묘함 및 작업 방법

비탈리 무지첸코 , 2021.02.28 00:21

유형을 즉시 함수에 입력 하고 코드를 늘리지 않을 수 있다면 #define 구조가 한 번 적용되는 요점이 무엇입니까?

정의할 수 있는 이점이 있습니까?

 
Vladimir Simakov :

이 같은)

upd: mql 서명에 맞게 조정됨

WinAPI mql 라이브러리에는 이 기능이 있습니다.

 int GetVolumeInformationW(
  const string root_path_name,
  ushort &volume_name_buffer[],
  uint volume_name_size,
  uint &volume_serial_number,
  uint &maximum_component_length,
  uint &file_system_flags,
  ushort &file_system_name_buffer[],
  uint file_system_name_size
);

유형이 다르며 C#에서 가져온 것 같습니다.

 #define BOOL bool
#define LPWSTR string &
#define LPCWSTR const LPWSTR
#define DWORD uint
#define LPDWORD DWORD&

BOOL GetVolumeInformationW(
  LPCWSTR lpRootPathName,
  LPWSTR  lpVolumeNameBuffer,
  DWORD   nVolumeNameSize,
  LPDWORD lpVolumeSerialNumber,
  LPDWORD lpMaximumComponentLength,
  LPDWORD lpFileSystemFlags,
  LPWSTR  lpFileSystemNameBuffer,
  DWORD   nFileSystemNameSize
);

---

그래서 질문은: 어디가 맞습니까?

사유: