Mql5 dilinin özellikleri, incelikleri ve çalışma yöntemleri - sayfa 198

 
Vladimir Simakov :
upd: x86 mimarisinde - cpuid işlemci talimatı. msvs'de __cpuid(int[4],int) ve __cpuidex(int[4],int,int) vardır. Nette örnekleri var.

İşlemci bilgisini bırakmaya karar verdim - neyin net olduğunu göstermiyor.

Tüm cihazın sayısını belirlemenin bir yolu olmadığı için diskte veya daha doğrusu bölümünde durdum.

Bir şüphe, veri türleri doğru girilmiş mi?

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

İşlemci bilgisini bırakmaya karar verdim - neyin net olduğunu göstermiyor.

Tüm cihazın sayısını belirlemenin bir yolu olmadığı için diskte veya daha doğrusu bölümünde durdum.

Bir şüphe, veri türleri doğru girilmiş mi?

Anakart kimliği doğru.

 
Valeriy Yastremskiy :

Anakart kimliği doğru.

Bir kod örneğiniz var mı lütfen?

 
Vitaly Muzichenko :

Bir kod örneğiniz var mı lütfen?

Kartın seri numarasını µl olarak nasıl alacağımı bulamadım.

wmic süpürgelik seri numarası almak

cmd cinsinden

 
Valeriy Yastremskiy :

Kartın seri numarasını µl olarak nasıl alacağımı bulamadım.

wmic süpürgelik seri numarası almak

cmd cinsinden

Ben de bulamadım.

 
Vitaly Muzichenko :
...

Bir şüphe, veri türleri doğru girilmiş mi?

 #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
);

Bunun gibi bir şey)

upd: mql imzaları için uyarlanmıştır

 
Vladimir Simakov :

Bunun gibi bir şey)

upd: mql imzaları için uyarlanmıştır

Tipleri hemen fonksiyona girebiliyorsanız ve kodu uzatmazsanız, bir kez uygulanan #define yapılarının anlamı nedir?

 
Vitaly Muzichenko :

Tipleri hemen fonksiyona girebiliyorsanız ve kodu uzatmazsanız, bir kez uygulanan #define yapılarının anlamı nedir?

bu, WinAPI işlevlerinin yerel imzasının ağıt yakılabileceği ve/veya kullanılabileceği anlamına gelir.

 
Igor Makanu :

bu, WinAPI işlevlerinin yerel imzasının ağıt yakılabileceği ve/veya kullanılabileceği anlamına gelir.

Mümkün, ama soru bu.

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Mql5 dilinin özellikleri, incelikleri ve çalışma yöntemleri

Vitaly Muzichenko , 2021.02.28 00:21

Türleri hemen fonksiyona girebiliyorsanız ve kodu uzatmazsanız, bir kez uygulanan #define yapılarının anlamı nedir?

Tanımlamaların herhangi bir avantajı var mı?

 
Vladimir Simakov :

Bunun gibi bir şey)

upd: mql imzaları için uyarlanmıştır

WinAPI mql kitaplığı bu işleve sahiptir

 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
);

Tipleriniz farklı, C#'tan alınmış gibiler

 #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
);

---

Öyleyse soru şu: nerede doğru?