gchrmt4: ...Tuttavia, quello script dovrebbe ancora funzionare per recuperare brevi risposte del server come i risultati di una query di licenza. Ha problemi solo se la dimensione della risposta del server supera 1KB-ish.
Puoi aiutarci e postare la tua soluzione per far funzionare il grabWeb() con la build 600? Penso che molte persone sarebbero interessate ad avere FFCal funzionante con la build 600.
Puoi aiutarci e postare la tua soluzione per far funzionare il grabWeb() con la build 600? Penso che molte persone sarebbero interessate ad avere FFCal funzionante con la build 600.
Vedi il post a cui risponde thili55 - ma nota che attualmente sembrano esserci problemi di gestione delle stringhe nella v600 che possono influenzare il download di tanti dati quanto il calendario FF.
gchrmt4: Vedi il post a cui risponde thili55 - ma nota che attualmente sembrano esserci problemi di gestione delle stringhe nella v600 che possono influenzare il download di tanti dati quanto il calendario FF.
Grazie per la risposta. Quindi dovremo aspettare una correzione di v600 prima di escogitare una soluzione per grabWeb, giusto? O è stato fornito un fix nella v603?
Grazie per la tua risposta. Quindi dovremo aspettare un fix di v600 prima di escogitare una soluzione per grabWeb, giusto? O è stato fornito un fix nella v603?
Sembra che tu non capisca il problema. Il codice deve essere corretto per tenere conto del cambiamento in mql4.
Ecco la funzione GrabWeb aggiornata per funzionare su v600. Ora usa InternetOpenW e InternetOpenUrlW e la conversione di unicode. Ottiene i file XML OK ma i file hanno tutti dati NULL. Vedi la dichiarazione di stampa per StrWebPage nel codice. Se guardate i dati in uscita è spazzatura mentre strThisRead ha dati validi. Qualcuno può dare un'occhiata e vedere se può individuare una correzione? Segue la correzione su questo thread:https://www.mql5.com/en/forum/149360
Basta copiare e incollare il codice nel vostro FFCal.mq4 e compilare con v600 MT4 ed eseguire (si prega di modificare le voci che non appartengono alla vostra versione in modo che si compili).
bool bWinInetDebug = false;
#define READURL_BUFFER_SIZE 1000#import "wininet.dll"int InternetOpenW(string, int, string, string, int);
int InternetOpenUrlW(int, string, string, int, int, int);
int InternetReadFile(int, uchar & arr[], int, int & arr[]);
int InternetCloseHandle(int);
#import
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+//bool GrabWeb(string strUrl, string& strWebPage)
{
int hInternet;
int hInternetUrl;
bool bSuccess = false;
// Get an internet handle
hInternet = InternetOpenW("mt4", 0/* 0 = INTERNET_OPEN_TYPE_PRECONFIG */, NULL, NULL, 0);
if (bWinInetDebug)
Log("hInternet: " + hInternet);
if (hInternet == 0)
{
Message = Symbol() + " " + IndicatorName + " Error 890 - Unable to get an Internet Handle!";
Print(Message);
Alert(Message);
HealthBuffer[0] = Error_state;
bSuccess = false;
}
else
{
// Get a URL handle
hInternetUrl = InternetOpenUrlW(hInternet, NewsURL, NULL, 0, 0, 0);
if (bWinInetDebug)
Log("hInternetUrl: " + hInternetUrl);
if (hInternetUrl == 0)
{
Message = Symbol() + " " + IndicatorName + " Error 891 - Unable to get a URL handle!";
Print(Message);
Alert(Message);
HealthBuffer[0] = Error_state;
bSuccess = false;
}
else
{
Print("Reading URL: " + strUrl);
bool bKeepReading = true;
while (bKeepReading)
{
int lReturn[1];
uchar arrReceive[];
ArrayResize(arrReceive, READURL_BUFFER_SIZE + 1);
int success = InternetReadFile(hInternetUrl, arrReceive, READURL_BUFFER_SIZE, lReturn);
if (success == 0)
{
Message = Symbol() + " " + IndicatorName + " Error 892 - Unable to read News Database WebPage!";
Print(Message);
Alert(Message);
HealthBuffer[0] = Error_state;
bKeepReading = false;
bSuccess = false;
}
else
{
if (bWinInetDebug)
Log("success: " + success);
if (bWinInetDebug)
Log("arrReceive: " + arrReceive[0]);
if (bWinInetDebug)
Log("lReturn: " + lReturn[0]);
// InternetReadFile() has succeeded, but we may be at the end of the data if (lReturn[0] == 0)
{
if (bWinInetDebug)
Print("Reached end of data");
bKeepReading = false;
bSuccess = true;
}
else
{
// Convert the data from Ansi to Unicode using the built-in MT4 functionstring strThisRead = CharArrayToString(arrReceive, 0, lReturn[0], CP_UTF8);
strWebPage = StringConcatenate(strWebPage, strThisRead); // <-- PROBLEM HERE ON FIRST USE ONLY IN EACH MT4 SESSIONPrint ("------------------------------->>>>>>>>>>>>>>>>>>>>>>>>>>>>>> strWebPage : ", strWebPage); // this shows garbage!
}
}
}
}
}
Print("Closing URL web connection");
success = InternetCloseHandle(hInternetUrl);
if (success == 0)
{
Message = Symbol() + " " + IndicatorName + " Error 896 - Unable to close URL handle!";
Print(Message);
Alert(Message);
HealthBuffer[0] = Error_state;
bSuccess = false;
}
else
{
success = InternetCloseHandle(hInternet);
if (success == 0)
{
Message = Symbol() + " " + IndicatorName + " Error 898 - Unable to close Internet Handle!";
Print(Message);
Alert(Message);
HealthBuffer[0] = Error_state;
bSuccess = false;
}
}
return(bSuccess);
} // end of function
Consenti l'uso dei cookie per accedere al sito MQL5.com.
Abilita le impostazioni necessarie nel browser, altrimenti non sarà possibile accedere.
Hai effettuato l'accesso. L'autenticazione a due fattori è stata disattivata. Configurala di nuovo e scansiona un nuovo codice QR, oppure continua con l'autenticazione a due fattori disattivata.
...Tuttavia, quello script dovrebbe ancora funzionare per recuperare brevi risposte del server come i risultati di una query di licenza. Ha problemi solo se la dimensione della risposta del server supera 1KB-ish.
Grazie, ha funzionato perfettamente!
Ciao thili55,
Puoi aiutarci e postare la tua soluzione per far funzionare il grabWeb() con la build 600? Penso che molte persone sarebbero interessate ad avere FFCal funzionante con la build 600.
Molte grazie
Puoi aiutarci e postare la tua soluzione per far funzionare il grabWeb() con la build 600? Penso che molte persone sarebbero interessate ad avere FFCal funzionante con la build 600.
Vedi il post a cui risponde thili55 - ma nota che attualmente sembrano esserci problemi di gestione delle stringhe nella v600 che possono influenzare il download di tanti dati quanto il calendario FF.
Grazie per la risposta. Quindi dovremo aspettare una correzione di v600 prima di escogitare una soluzione per grabWeb, giusto? O è stato fornito un fix nella v603?
Grazie per la tua risposta. Quindi dovremo aspettare un fix di v600 prima di escogitare una soluzione per grabWeb, giusto? O è stato fornito un fix nella v603?
Ecco la funzione GrabWeb aggiornata per funzionare su v600. Ora usa InternetOpenW e InternetOpenUrlW e la conversione di unicode. Ottiene i file XML OK ma i file hanno tutti dati NULL. Vedi la dichiarazione di stampa per StrWebPage nel codice. Se guardate i dati in uscita è spazzatura mentre strThisRead ha dati validi. Qualcuno può dare un'occhiata e vedere se può individuare una correzione? Segue la correzione su questo thread: https://www.mql5.com/en/forum/149360
Basta copiare e incollare il codice nel vostro FFCal.mq4 e compilare con v600 MT4 ed eseguire (si prega di modificare le voci che non appartengono alla vostra versione in modo che si compili).
Ho provato a fare uno script GRABWEB
molto semplice... e funziona bene nella build 604
Ho provato a fare uno script GRABWEB
molto semplice... e funziona bene nella build 604
Posso chiedere come stai superando questo errore di compilazione con v604 per questa linea di codice:
InternetReadFile(HttpRequest, Buffer, StringLen(Buffer), read);Errore: 'Buffer' - conversione del parametro non consentita
Per favore controlla la tua versione di MT4 e prova di nuovo!
Posso chiederti come stai superando questo errore di compilazione con v604 per questa linea di codice:
Errore: 'Buffer' - conversione del parametro non consentita
Controlla la tua versione di MT4 e riprova!
Non c'è questo errore sul mio v604 e v600 con questo programma nessun errore e nessun avviso il file è stato scaricato correttamente
Ho provato a fare uno script GRABWEB
molto semplice... e funziona bene nella build 604
Posso chiederti come stai superando questo errore di compilazione con la v604 per questa linea di codice:
Errore: 'Buffer' - conversione del parametro non consentita
Controlla la tua versione di MT4 e riprova!
forse stai usando il carattere u
nel mio script sto usando una stringa