Qualsiasi domanda da un PROFI a un SUPER PROFI - 1. - pagina 36

 
IgorM:

ZS: non riesco a trovare un NS pronto cercando e googlando, la .dll con FANN funziona abbastanza bene, ma mi piacerebbe che funzionasse senza la .dll

Hai un'idea di cosa vuoi? Portare il codice OOP scritto normalmente a NS sottosviluppati? Penso che nessuno lo farà. Tanto più sarà più veloce tramite .dll.

Chiedetelo al 5, lì hanno già balbettato.

 

Compagni, mi sono imbattuto in un indicatore che chiama se stesso, ecco una parte del codice (l'indicatore stesso è nel trailer):

........
IndicatorFileName=WindowExpertName(); 
........
for(i=0,int y=0; i<limit; i++)
        {
         if(Time[i]<TimeArray[y]) y++;
         sslHup[i]=iCustom(NULL,TimeFrame,IndicatorFileName,Lb,SSL_BarLevel,0,y);
         sslHdn[i]=iCustom(NULL,TimeFrame,IndicatorFileName,Lb,SSL_BarLevel,1,y);
        }

Il tester non riesce a chiamarlo correttamente usando iCustom() dall'Expert Advisor. Questo è ciò che otteniamo:

iCustom() di esso nell'Expert Advisor si presenta così:

iCustom (Symbol(), 0, "SSL_fast_sBar_Good_V12_1h", 1, 40, TF, 0, BarShift)

Viene visualizzato correttamente solo se il TF del tester è lo stesso del TF nelle impostazioni dell'EA.

Puoi consigliare come comporre correttamente la sua chiamata in modo che venga visualizzata correttamente indipendentemente dal TF del tester?
O non può essere fatto a causa delle peculiarità del codice dell'indicatore?

 

Leggi un articolo di Microsoft: http://technet.microsoft.com/ru-ru/library/dd630755(v=office.12).aspx

Ecco una citazione da esso:

64-разрядные выпуски Windows Server могут выполнять адресацию 16 терабайт виртуальной памяти с помощью плоской модели адресации. Виртуальная память разделяется на равные части между виртуальными адресными пространствами для приложений и операционной системы. Увеличение адресного пространства виртуальной памяти в 64-разрядной среде может благоприятно сказаться даже на работе 32-разрядных приложений. Например, хотя 32-разрядное приложение по-прежнему ограничено 4 ГБ виртуальной памяти, ему больше не требуется разделять это пространство с операционной системой. В результате возникает фактическое расширение виртуальной памяти.

Risulta che MT4 può indirizzare fino a 4GB di memoria sotto un sistema operativo a 64-bit?

Non posso controllare con me stesso. Non c'è un posto dove mettere tutta quella memoria.

 

Ciao

Domanda sulle prese.

... C'è un compito dal sistema SCADA che esegue VB (antico) per inviare dati al socket. Ho provato a implementarlo direttamente da Vb tramite API, ma c'è un problema

Se la connessione al socket fallisce, VB aspetta la risposta e rallenta un po' di tempo (questo è critico)

Volevo provare a creare un singolo thread da VB, ma ho scoperto che VB non capisce AddressOf.

Come posso spiegare a VB di aspettare la risposta dal socket remoto per esempio 1 sec come TTL per ping'a (socket remoto su locale)?

Ho provato in un altro modo: su C ++ bilder ha scritto un'applicazione console da inviare al socket.

Provato in esecuzione funziona.

Poi ho provato a creare un processo autonomo da VB. Il Runtime funziona ma non invia alcun dato.

Ho iniziato il debugging del processo e ho messo cout<< <<endl ovunque possibile;

Vedo che quando invoco l'exe manualmente, WsaStartUp funziona con 0 e si collega a 0, invia il numero di dati trasferiti

Ma quando inizio con VB, WsaStartUp funziona per 0 e si connette per -1, invia rispettivamente per 10038.

Non so cosa c'è che non va.

Ecco il codice da VB

Public Declare Function socket Lib "WSOCK32.DLL" (ByVal af As Long, ByVal s_type As Long, ByVal protocol As Long) As Long

Public Declare Function send Lib "WSOCK32.DLL" (ByVal s As Long, buf As Any, ByVal buflen As Long, ByVal Flags As Long) As Long
Public Declare Function connect Lib "wsock32" (ByVal socket As Long, addr As sockaddr, ByVal namelen As Long) As Long


Public Declare Function closesocket Lib "WSOCK32.DLL" (ByVal s As Long) As Long
Public Declare Function inet_addr Lib "wsock32" (ByVal cp As String) As Long
Public Declare Function htons Lib "ws2_32.dll" (ByVal hostshort As Long) As Integer
Public Declare Function WSAStartup Lib "ws2_32.dll" (ByVal wVR As Long, lpWSAD As WSA_Data) As Long
Public Declare Function WSACleanUp Lib "wsock32" Alias "WSACleanup" () As Long

Type sockaddr
    sin_family As Integer
    sin_port As Integer
    sin_addr As Long
    sin_zero As String * 8
End Type

Public Const WSADESCRIPTION_LEN = 257
Public Const WSASYS_STATUS_LEN = 129
Public Const WINSOCK_VERSION = 1
Public Type WSA_Data
    wVersion       As Integer
    wHighVersion   As Integer
    szDescription  As String * WSADESCRIPTION_LEN
    szSystemStatus As String * WSASYS_STATUS_LEN
    iMaxSockets    As Integer
    iMaxUdpDg      As Integer
    lpVendorInfo   As Long
End Type

'===================================================================
Const INFINITE = &HFFFF
Const STARTF_USESHOWWINDOW = &H1


Public Const SW_NORMAL = 1

Private Type PROCESS_INFORMATION
    hProcess As Long
    hThread As Long
    dwProcessId As Long
    dwThreadId As Long
End Type

Private Type STARTUPINFO
    cb As Long
    lpReserved As String
    lpDesktop As String
    lpTitle As String
    dwX As Long
    dwY As Long
    dwXSize As Long
    dwYSize As Long
    dwXCountChars As Long
    dwYCountChars As Long
    dwFillAttribute As Long
    dwFlags As Long
    wShowWindow As Integer
    cbReserved2 As Integer
    lpReserved2 As Byte
    hStdInput As Long
    hStdOutput As Long
    hStdError As Long
End Type

Private Type SECURITY_ATTRIBUTES
    nLength As Long
    lpSecurityDescriptor As Long
    bInheritHandle As Long
End Type


Public Const NORMAL_PRIORITY_CLASS = &H20

Private Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As _
                            String, ByVal lpCommandLine As String, lpProcessAttributes As SECURITY_ATTRIBUTES, _
                            lpThreadAttributes As SECURITY_ATTRIBUTES, ByVal bInheritHandles As Long, ByVal dwCreationFlags _
                            As Long, lpEnvironment As Any, ByVal lpCurrentDriectory As String, lpStartupInfo As STARTUPINFO, _
                            lpProcessInformation As PROCESS_INFORMATION) As Boolean
Private Declare Function GetLastError Lib "kernel32" () As Long
Public Function SuperShell(ByVal App As String, ByVal commandline) As Integer

    Const CREATE_NO_WINDOW = &H8000000
    Dim startProc As Boolean
    Dim pclass As Long
    Dim sinfo As STARTUPINFO
    Dim pinfo As PROCESS_INFORMATION
    'Not used, but needed
    Dim sec1 As SECURITY_ATTRIBUTES
    Dim sec2 As SECURITY_ATTRIBUTES
    'Set the structure size
    sec1.nLength = Len(sec1)
    sec2.nLength = Len(sec2)
    'sinfo.cb = Len(sinfo)
    'Set the flags
    'sinfo.dwFlags = STARTF_USESHOWWINDOW
    'Set the window's startup position
    'sinfo.wShowWindow = start_size
    'Set the priority class
    'pclass = Priority_Class

    'Start the program                                                            CREATE_NO_WINDOW
    startProc = CreateProcess("e:\\project1.exe", commandline, sec1, sec2, False, 0, 0&, "e:\", sinfo, pinfo)

End Function
Public Sub testdll()
    Dim str
    str = "srwevbwert4th"    
    modSocket.SuperShell "e:\\Project1.exe", str
End Sub
 
Come trovare il codice di errore di sistema (GetLastError) senza la propria dll? Credo di averlo visto, ma non riesco a trovarlo. Ricordo che sembra importare un'altra funzione, non ricordo quale.
 
#import "ntdll.dll"
        int RtlGetLastWin32Error();
        int RtlSetLastWin32Error (int dwErrCode);
#import


 
Ecco, questo è tutto. Grazie.
 

Ciao

Perché questo file di storia non appare sul grafico in MT?

File:
 

C'è bisogno di conoscere la dimensione delle informazioni di testo passate, in una DLL. Diciamo che in MKL5 questo è fatto da sizeof().

Sarebbe corretto farlo in MKL4 tramite StringLen()? Come sarebbe corretto?

p.s. interessato a inviare il terzo parametro qui:http://msdn.microsoft.com/en-us/library/aa365747(v=vs.85).aspx

 
Heroix:

C'è bisogno di conoscere la dimensione delle informazioni di testo passate, in una DLL. Diciamo che in MKL5 questo è fatto da sizeof().

Sarebbe corretto farlo in MKL4 tramite StringLen()? Come sarebbe corretto?

p.s. interessato a inviare il terzo parametro qui:http://msdn.microsoft.com/en-us/library/aa365747(v=vs.85).aspx

Si può, naturalmente. Ci sono esempi di lavoro con questa funzione in MQL4 qui.