Características da linguagem mql5, subtilezas e técnicas - página 198

 
Vladimir Simakov:
Actualização: sobre a arquitectura x86 - instrução prsessor cpuid. A msvs tem __cpuid(int[4],int) e __cpuidex(int[4],int,int). Estão disponíveis exemplos em linha.

Decidiu descartar a informação do processador - não mostra nada.

Instalei-me no disco, ou melhor, na sua partição, pois não há forma de determinar o número de todo o dispositivo.

Uma dúvida, os tipos de dados são correctos?

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

Decidiu descartar a informação do processador - não mostra nada.

Instalei-me no disco, ou melhor, na sua partição, pois não há forma de determinar o número de todo o dispositivo.

Tenho uma dúvida, os tipos de dados estão correctos?

A identificação da placa mãe está correcta.

 
Valeriy Yastremskiy:

A identificação da placa mãe está correcta.

Há algum exemplo de código, pode mostrar-me?

 
Vitaly Muzichenko:

Existe um código de amostra, pode mostrar-me?

Não consigo encontrar o número de série do quadro no µl.

wmic rodapé recebe número de série

em cmd

 
Valeriy Yastremskiy:

Como obter o número de série do quadro no µl que ainda não encontrei.

wmic rodapé recebe número de série

em cmd

Também não o consegui encontrar.

 
Vitaly Muzichenko:
...

Uma dúvida é se os tipos de dados estão escritos correctamente?

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

De algum modo)

upd: adaptado a mql-signatures

 
Vladimir Simakov:

De algum modo)

upd: adaptado para mql-assinaturas

Qual é o interesse de #define constructions aplicadas uma vez, se se pode colocar tipos numa função de uma só vez e não esticar o código?

 
Vitaly Muzichenko:

Qual é o sentido de #define construções usadas uma vez, se se pode colocar tipos numa função de uma só vez e não esticar o código?

a questão é que pode ler e/ou utilizar a assinatura nativa da função WinAPI

 
Igor Makanu:

a sensação de que é possível ler e/ou utilizar uma assinatura nativa da função WinAPI

Talvez, mas a questão é exactamente esta

Fórum sobre comércio, sistemas de comércio automatizados e testes estratégicos

Peculiaridades de mql5, dicas e truques

Vitaly Muzichenko, 2021.02.28 00:21

Qual é a utilização de #define constructions usadas uma vez, se é possível escrever imediatamente os tipos na função , e não para esticar o código?

Há alguma vantagem em definir?

 
Vladimir Simakov:

De algum modo)

upd: adaptado para mql-assinaturas

A bíblia mql WinAPI tem esta função

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

Os seus tipos são diferentes, devem ser de 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
);

---

Então a minha pergunta é: onde está correcto?