이 코드는 더 이상 내 서버의 계정을 확인하지 않는 MT4 빌드 600에서 테스트할 때까지 완벽하게 작동했습니다.
gevoyageur 제안해주셔서 감사합니다. 하지만 모든 si 'A'를 W로 전환하려고 했지만 여전히 주사위가 없습니다.
문제는 InternetReadFile()에 있을 것입니다. 새 MQL4에서 WinInet 기능을 사용하는 방법에 대한 예는 https://www.mql5.com/en/code/1998 에서 EasyXml.mqh를 참조하십시오. 코드는 MQL4와 MQL5에서 모두 작동합니다.
본질적으로 uchar[] 배열을 InternetReadFile()에 전달한 다음 CharArrayToString()을 사용하여 배열을 문자열로 변환합니다. 이제 MQL4에서 할 수 있는 일은 임의 길이의 관리되는 메모리 버퍼를 할당하고 DLL에 전달한 다음 해당하는 경우 Ansi 또는 유니코드의 데이터를 변환하는 것입니다.
본질적으로 uchar[] 배열을 InternetReadFile()에 전달한 다음 CharArrayToString()을 사용하여 배열을 문자열로 변환합니다. 이제 MQL4에서 할 수 있는 일은 임의 길이의 관리되는 메모리 버퍼를 할당하고 DLL에 전달한 다음 해당하는 경우 Ansi 또는 유니코드의 데이터를 변환하는 것입니다.
주제와 답변을 약간 확장하면... 새로운 MQL4에서는 많은 기능 의 A 또는 W 버전을 호출할 수 있습니다. 예를 들어 다음 스크립트는 GetTempPathA 및 GetTempPathW 호출을 모두 사용하여 Windows 임시 디렉터리를 가져옵니다.
#import "kernel32.dll" int GetTempPathA( int , uchar & arr[]); int GetTempPathW( int , short & arr[]); #import void OnStart () { uchar AnsiStringBuffer[ 256 ]; GetTempPathA( 255 , AnsiStringBuffer); string strTempPathFromA = CharArrayToString (AnsiStringBuffer); short UnicodeStringBuffer[ 256 ]; GetTempPathW( 255 , UnicodeStringBuffer); string strTempPathFromW = ShortArrayToString (UnicodeStringBuffer); Print ( "Temp path via GetTempPathA(): " , strTempPathFromA); Print ( "Temp path via GetTempPathW(): " , strTempPathFromW); }
따라서 새로운 MQL4에서 많은 Ansi 전용 DLL 호출을 계속 사용할 수 있습니다. MQL4 코드 와 DLL을 모두 업데이트할 필요는 없습니다.
따라서 새로운 MQL4에서 많은 Ansi 전용 DLL 호출을 계속 사용할 수 있습니다. MQL4 코드 와 DLL을 모두 업데이트할 필요는 없습니다.
... 또 다른 예: 새 MQL4에서 Ansi DLL 호출 로 문자열 값 전달. (실생활에서는 분명히 이 해결 방법을 사용하여 MessageBoxA 를 호출하는 대신 MessageBoxW를 호출하지만 일반적인 요점은 유용합니다.)
#import "user32.dll" // Declare the Ansi function as taking uchar[] input parameters instead of strings int MessageBoxA( int , uchar & arr1[], uchar & arr2[], int ); #import void OnStart () { string strMessage = "Hello" ; string strTitle = "Hi!" ; // Convert the strings to uchar[] arrays uchar ucMessage[], ucTitle[]; StringToCharArray (strMessage, ucMessage); StringToCharArray (strTitle, ucTitle); MessageBoxA( 0 , ucMessage, ucTitle, 64 ); }
나는 지금 몇 시간 동안 이것을 가지고 놀았지만 여전히 운이 없습니다. 예, 저를 위해 이 일을 할 사람을 고용하려고 합니다 ;)
나는 지금 몇 시간 동안 이것을 가지고 놀았지만 여전히 운이 없습니다. 예, 저를 위해 이 일을 할 사람을 고용하려고 합니다 ;)
이 코드는 더 이상 내 서버의 계정을 확인하지 않는 MT4 빌드 600에서 테스트할 때까지 완벽하게 작동했습니다.