Alle Fragen von einem PROFI an einen SUPER PROFI - 1. - Seite 36

 
IgorM:

ZS: Ich kann kein fertiges NS durch Suchen und Googeln finden, die .dll mit FANN funktioniert ziemlich gut, aber ich würde es gerne ohne die .dll

Haben Sie eine Vorstellung davon, was Sie wollen? Um normal geschriebenen OOP-Code auf unterentwickeltes NS zu portieren? Ich denke, niemand wird es tun. Umso schneller ginge es über die .dll.

Fragen Sie nach der 5, dort stotterten sie bereits.

 

Kameraden, stieß auf einen Indikator, der sich selbst aufruft, hier ist ein Teil des Codes (der Indikator selbst ist im Anhänger):

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

Der Tester schafft es nicht, ihn mit iCustom() vom Expert Advisor aus korrekt aufzurufen. Das ist es, was wir bekommen:

iCustom() sieht im Expert Advisor wie folgt aus:

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

Sie wird nur dann korrekt angezeigt, wenn die TF des Testers mit der TF in den EA-Einstellungen übereinstimmt.

Können Sie mir sagen, wie ich den Aufruf korrekt gestalten kann, damit er unabhängig von der TF des Testers korrekt angezeigt wird?
Oder ist dies aufgrund von Besonderheiten des Indikatorcodes nicht möglich?

 

Lesen Sie einen Artikel von Microsoft: http://technet.microsoft.com/ru-ru/library/dd630755(v=office.12).aspx

Hier ist ein Zitat daraus:

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

Es stellt sich heraus, dass MT4 kann auf 4 GB Speicher unter 64-Bit-OS-Adresse?

Ich kann es nicht selbst überprüfen. Es gibt keinen Platz für so viel Speicherplatz.

 

Hallo

Frage zu Steckdosen.

... Es gibt eine Aufgabe von SCADA-System läuft VB (alt), um Daten an Socket zu senden. Ich habe versucht, es direkt von Vb mit Hilfe von API zu implementieren, aber es gibt ein Problem

Wenn die Verbindung zum Socket fehlschlägt, wartet VB auf die Antwort und verlangsamt einige Zeit (dies ist kritisch)

Ich wollte versuchen, einen einzelnen Thread aus VB zu erstellen, aber es stellte sich heraus, dass VB AddressOf nicht versteht.

Wie kann ich VB erklären, um auf eine Antwort von einem entfernten Socket zu warten, z.B. 1 Sekunde wie TTL für ping'a (entfernter Socket auf lokalem)?

Versucht einen anderen Weg: auf C + + bilder schrieb eine Konsolenanwendung an Socket zu senden.

Versucht zu laufen, es funktioniert.

Dann habe ich versucht, einen eigenständigen Prozess aus VB. Die Runtime läuft, sendet aber keine Daten.

Ich habe begonnen, mit cout<< <<endl zu debuggen;

Wenn ich die Exe manuell aufrufe, arbeitet WsaStartUp mit 0 und verbindet sich mit 0, sendet die Anzahl der übertragenen Daten zurück

Aber wenn ich mit VB starte, funktioniert WsaStartUp für 0 und connect für -1, bzw. send für 10038.

Ich weiß nicht, was los ist.

Hier ist der Code von 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
 
Wie kann man den Systemfehlercode (GetLastError) ohne eigene DLL herausfinden? Ich glaube, ich habe es gesehen, aber ich kann es nicht finden. Ich erinnere mich, dass es eine andere Funktion zu importieren scheint, aber ich weiß nicht mehr, welche es ist.
 
#import "ntdll.dll"
        int RtlGetLastWin32Error();
        int RtlSetLastWin32Error (int dwErrCode);
#import


 
So, das war's. Danke. (lacht)
 

Hallo

Warum wird diese Verlaufsdatei nicht auf dem Diagramm in MT angezeigt?

Dateien:
 

Es ist notwendig, die Größe der übergebenen Textinformationen in einer DLL zu kennen. In MKL5 wird dies durch sizeof() erledigt.

Wäre es richtig, dies in MKL4 über StringLen() zu tun? Wie kann das richtig sein?

p.s. Interesse an der Übermittlung des dritten Parameters hier:http://msdn.microsoft.com/en-us/library/aa365747(v=vs.85).aspx

 
Heroix:

Es ist notwendig, die Größe der übergebenen Textinformationen in einer DLL zu kennen. In MKL5 wird dies durch sizeof() erledigt.

Wäre es richtig, dies in MKL4 über StringLen() zu tun? Wie kann das richtig sein?

p.s. Interesse an der Übermittlung des dritten Parameters hier:http://msdn.microsoft.com/en-us/library/aa365747(v=vs.85).aspx

Natürlich können Sie das. Hier finden Sie Beispiele für die Arbeit mit dieser Funktion in MQL4.