Non credo, non puoi spingere megabyte di informazioni attraverso OBJ_TEXT.
il candidato più vicino è le risorse
Nota: un punto è in realtà una struttura piena di variabili di diversi tipi. Viene salvato quando si chiude/apre il terminale e anche salvato in un modello.
Nota: un punto è in realtà una struttura piena di variabili di diversi tipi. Viene salvato quando si chiude/apre il terminale ed è anche salvato nel modello.
Continuo a chiedere, avete già trovato una soluzione per DLL 32/64?
C'è una specie di WOW32reg.exe nel sistema (\System32\). Ho girato in lungo e in largo, non risponde a -h -?, non ho potuto registrare nulla alla cieca.
Anche Google è silenzioso, non sono riuscito a trovare nulla su microsoft.com... quindi è abbastanza figo.
Continuo a chiedere: avete già trovato una soluzione per DLL 32/64?
C'è una specie di WOW32reg.exe nel sistema (\System32\). Ho girato in lungo e in largo, non risponde a -h -?, non ho potuto registrare nulla alla cieca.
Anche Google è silenzioso, non ho trovato nulla su microsoft.com... in generale, è acuto.
Quindi, è solo un'idea, non l'ho provata io stesso. Dopo aver rilevato la profondità di bit del terminale, usate LoadLibrary per caricare dinamicamente la DLL.
Continuo a chiedere, avete già trovato una soluzione per DLL 32/64 ?
Qual è il problema qui?
In import si specificano due funzioni identiche, solo con parametri diversi (int/long). Nel programma, a seconda del 32/64 bit, si chiama la funzione corrispondente.
Continuo a chiedere, avete già trovato una soluzione per DLL 32/64 ?
Il codice per chiamare funzioni da quelle del vento (quando si passano puntatori a queste) - trovato.
Grazie al contesto :: tutto è risolto ordinatamente.
Yurich:
In import si specificano due funzioni identiche, solo con parametri diversi (int/long). Nel programma, a seconda del 32/64 bit, si chiama la funzione corrispondente.
Ad esempio così:
#import "MemMap32.dll"int MemRead(HANDLE32 hmem, int &v[], int pos, int sz, int &err); // чтение вектора v с указанной позиции pos размером sz#import "MemMap64.dll"int MemRead(HANDLE64 hmem, int &v[], int pos, int sz, int &err); // чтение вектора v с указанной позиции pos размером sz#import
// переопределяем вызовы для контроля битностиint MemRead(HANDLE64 h, int &v[], int pos, int sz, int &error) { if (_IsX64) return(MemMap64::MemRead(h, v, pos, sz, error)); return(MemMap32::MemRead((HANDLE32)h, v, pos, sz, error)); }
in un codice che chiamate con esplicito :: context.
::MemRead(...)
Cioè, non moltiplichiamo i nomi delle funzioni, ma facciamo l'autodetection del bit rate e chiamiamo quella importata correttamente.
Continuo a chiedermi: avete già trovato una soluzione per 32/64 DLL?
Il modo più semplice è mettere le DLL x32 e x64 con lo stesso nome in diverse directory del sistema Windows - SysWOW64 e System32, rispettivamente.
Ma lo scambio di dati interprogramma è davvero un problema, soprattutto se lo si affronta a caso. Così probabilmente ragionato e Microsoft, quando negli anni novanta del secolo scorso, è andato da un file, flusso di scambio per oggetto - OLE da esso a ActiveX -> COM -> COM + -> .NET, cioè basato su una tecnologia di scambio interprogramma hanno creato un nuovo sistema di programmazione ed esecuzione del codice.
In import si specificano due funzioni identiche, solo con parametri diversi (int/long). Nel programma, si chiama la funzione appropriata a seconda della dimensione del bit 32/64.
Non vuole affatto caricare quella a 32 bit, e non vuole eseguire il programma anche se non lo chiamo già (la dll).
Se"Allow use of DLL" è deselezionato, il pulsante [OK] non viene visualizzato affatto, solo annullato. Allow, clicca su OK - il programma si blocca. Deadlock.
2013.12.19 17:43:20.657 TestFFTdll 'E:\Programs\MetaQuotes_MT5\MQL5\Libraries\fft32.dll' is not 64-bit version
Idealmente, vorrei essere in grado di chiamare dll32 nel terminale x64. So per certo che è teoricamente possibile, ma non so come.
Non vuole affatto caricare quello a 32 bit, e non vuole eseguire il programma anche se non lo chiamo più (dll).
Quando"Allow dll" è deselezionato, il pulsante [OK] non viene visualizzato affatto, solo annullato. Allow, clicca OK - il programma si blocca. Deadlock.
Idealmente, vorrei essere in grado di chiamare dll32 nel terminale x64. So per certo che è teoricamente possibile, ma non so come.
Ho appena controllato:
2013.12.19 18:49:01.437 do (EURUSD,H1) TEST 2013.12.19 18:49:01.436 do (EURUSD,H1) Cannot load 'E:\MT5_REV1\Client\MetaTrader5Terminal\Final\MQL5\Libraries\test.dll' 2013.12.19 18:48:58.929 do 'E:\MT5_REV1\Client\MetaTrader5Terminal\Final\MQL5\Libraries\test.dll' is not 64-bit version
La libreria non viene caricata, ma tutto funziona finché la sua funzione non viene chiamata (uscita TEST);
Ora chiamiamo la funzione di tale libreria:
2013.12.19 18:51:07.446 do (EURUSD,H1) unresolved import function call 2013.12.19 18:51:07.446 do (EURUSD,H1) Cannot call 'fnCrashTest', 'test.dll' is not loaded 2013.12.19 18:51:07.445 do (EURUSD,H1) Cannot load 'E:\MT5_REV1\Client\MetaTrader5Terminal\Final\MQL5\Libraries\test.dll' 2013.12.19 18:51:05.107 do 'E:\MT5_REV1\Client\MetaTrader5Terminal\Final\MQL5\Libraries\test.dll' is not 64-bit version
Non credo, non puoi spingere megabyte di informazioni attraverso OBJ_TEXT.
il candidato più vicino è le risorse
Nota: un punto è in realtà una struttura piena di variabili di diversi tipi. Viene salvato quando si chiude/apre il terminale e anche salvato in un modello.
Nota: un punto è in realtà una struttura piena di variabili di diversi tipi. Viene salvato quando si chiude/apre il terminale ed è anche salvato nel modello.
Continuo a chiedere, avete già trovato una soluzione per DLL 32/64?
C'è una specie di WOW32reg.exe nel sistema (\System32\). Ho girato in lungo e in largo, non risponde a -h -?, non ho potuto registrare nulla alla cieca.
Anche Google è silenzioso, non sono riuscito a trovare nulla su microsoft.com... quindi è abbastanza figo.
?
Cosa non è chiaro? Dammi un compito concreto, ma è tutto un giro di parole...?
Continuo a chiedere: avete già trovato una soluzione per DLL 32/64?
C'è una specie di WOW32reg.exe nel sistema (\System32\). Ho girato in lungo e in largo, non risponde a -h -?, non ho potuto registrare nulla alla cieca.
Anche Google è silenzioso, non ho trovato nulla su microsoft.com... in generale, è acuto.
Quindi, è solo un'idea, non l'ho provata io stesso. Dopo aver rilevato la profondità di bit del terminale, usate LoadLibrary per caricare dinamicamente la DLL.
Continuo a chiedere, avete già trovato una soluzione per DLL 32/64 ?
Qual è il problema qui?
In import si specificano due funzioni identiche, solo con parametri diversi (int/long). Nel programma, a seconda del 32/64 bit, si chiama la funzione corrispondente.
Continuo a chiedere, avete già trovato una soluzione per DLL 32/64 ?
Grazie al contesto :: tutto è risolto ordinatamente.
In import si specificano due funzioni identiche, solo con parametri diversi (int/long). Nel programma, a seconda del 32/64 bit, si chiama la funzione corrispondente.
Ad esempio così:
in un codice che chiamate con esplicito :: context.::MemRead(...)
Cioè, non moltiplichiamo i nomi delle funzioni, ma facciamo l'autodetection del bit rate e chiamiamo quella importata correttamente.
Continuo a chiedermi: avete già trovato una soluzione per 32/64 DLL?
Il modo più semplice è mettere le DLL x32 e x64 con lo stesso nome in diverse directory del sistema Windows - SysWOW64 e System32, rispettivamente.
Ma lo scambio di dati interprogramma è davvero un problema, soprattutto se lo si affronta a caso.
Così probabilmente ragionato e Microsoft, quando negli anni novanta del secolo scorso, è andato da un file, flusso di scambio per oggetto - OLE da esso a ActiveX -> COM -> COM + -> .NET, cioè basato su una tecnologia di scambio interprogramma hanno creato un nuovo sistema di programmazione ed esecuzione del codice.
Qual è il problema qui?
In import si specificano due funzioni identiche, solo con parametri diversi (int/long). Nel programma, si chiama la funzione appropriata a seconda della dimensione del bit 32/64.
Non vuole affatto caricare quella a 32 bit, e non vuole eseguire il programma anche se non lo chiamo già (la dll).
Se"Allow use of DLL" è deselezionato, il pulsante [OK] non viene visualizzato affatto, solo annullato. Allow, clicca su OK - il programma si blocca. Deadlock.
Idealmente, vorrei essere in grado di chiamare dll32 nel terminale x64. So per certo che è teoricamente possibile, ma non so come.
Non vuole affatto caricare quello a 32 bit, e non vuole eseguire il programma anche se non lo chiamo più (dll).
Quando"Allow dll" è deselezionato, il pulsante [OK] non viene visualizzato affatto, solo annullato. Allow, clicca OK - il programma si blocca. Deadlock.
Idealmente, vorrei essere in grado di chiamare dll32 nel terminale x64. So per certo che è teoricamente possibile, ma non so come.
2013.12.19 18:49:01.436 do (EURUSD,H1) Cannot load 'E:\MT5_REV1\Client\MetaTrader5Terminal\Final\MQL5\Libraries\test.dll'
2013.12.19 18:48:58.929 do 'E:\MT5_REV1\Client\MetaTrader5Terminal\Final\MQL5\Libraries\test.dll' is not 64-bit version
Ora chiamiamo la funzione di tale libreria:
2013.12.19 18:51:07.446 do (EURUSD,H1) Cannot call 'fnCrashTest', 'test.dll' is not loaded
2013.12.19 18:51:07.445 do (EURUSD,H1) Cannot load 'E:\MT5_REV1\Client\MetaTrader5Terminal\Final\MQL5\Libraries\test.dll'
2013.12.19 18:51:05.107 do 'E:\MT5_REV1\Client\MetaTrader5Terminal\Final\MQL5\Libraries\test.dll' is not 64-bit version