PROFIからSUPER PROFIへの質問-1. - ページ 36

 
IgorM:

ZS: 検索してもググっても既製のNSが見つからない、FANN付きの.dllは結構使えるが、.dllなしが欲しいところだ

何をしたいのか、考えていますか?普通に書かれたOOPコードを過疎地のNSに移植するため?誰もやらないんじゃないですか?ましてや、DLLを通せばより速くなる。

5で頼めよ、もうそこで吃驚してるんだから。

 

同志たち、自分自身を呼び出すインジケータに出くわしました、ここでコードの一部です(インジケータ自体はトレーラーにあります)。

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

Expert Advisor から iCustom() を使用して正しく呼び出すことができません。これが、私たちの手に入るものです。

Expert AdvisorでのiCustom()は次のようになります。

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

テスターのTFとEAの設定のTFが同じ場合のみ、正しく表示されます。

テスターのTFに関係なく正しく表示されるように、その呼び方を正しくする方法をアドバイスしていただけませんか?
それとも、インジケーターコードの特殊性でできないのでしょうか?

ファイル:
 

マイクロソフトの記事を読む: http://technet.microsoft.com/ru-ru/library/dd630755(v=office.12).aspx

以下はその引用である。

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

64bitOSでMT4が4GBのメモリにアドレスできることが判明?

自分では確認できない。それだけのメモリーを置く場所がないのです。

 

こんにちは

ソケットについて質問です。

...VB(古代)を使用しているSCADAシステムから、ソケットにデータを送信するタスクがあります。VbからAPIを使って直接実装しようとしたのですが、一つ問題があります。

ソケットへの接続に失敗した場合、VBは応答を待っているため、時間がかかる(これは重要)

VBからシングルスレッドを作ろうと思ったのですが、VBはAddressOfを理解できないことが判明しました。

PingのTTLのようにリモートソケットからの応答を1秒待つ(リモートソケットがローカルにある)ことをVBで説明するにはどうすればよいでしょうか?

別の方法を試してみました:C++のビルダーで、ソケットに送信するコンソールアプリケーションを書きました。

実行を試したところ、うまくいきました。

そこで、VB.NETからスタンドアローンプロセスを作成することにしました。ランタイムは実行されますが、データは送信されません。

cout<< <<endl を使ってデバッグするようになりました。

手動でexeを起動すると、WsaStartUpが0で動作し、0に接続し、転送されたデータの数を返すことがわかります。

しかし、VBで起動すると、0ではWsaStartUpが動作し、-1ではconnect、10038ではそれぞれsendします。

どうしたんだろう?

以下は、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
 
自前のDLLを使わずにシステムエラーコード(GetLastError)を調べる方法を教えてください。 見たことがあるような気がするのですが、見つけられませんでした。別の機能をインポートして いるような記憶があるのですが、どの機能かは覚えていません。
 
#import "ntdll.dll"
        int RtlGetLastWin32Error();
        int RtlSetLastWin32Error (int dwErrCode);
#import


 
そこだ、そこだ。ありがとうございます(苦笑)。
 

こんにちは

この履歴ファイルは、なぜMTのチャートに表示されないのですか?

ファイル:
 

DLLで、渡されたテキスト情報のサイズを知る必要がある。例えば、MKL5ではこれをsizeof()で行っているとします。

MKL4ではStringLen()で行うのが正しいのでしょうか?どうすれば正しいのでしょうか?

p.s. 第3のパラメータを送信することに興味がある方は、こちらをご覧ください: http://msdn.microsoft.com/en-us/library/aa365747(v=vs.85).aspx

 
Heroix:

DLLで、渡されたテキスト情報のサイズを知る必要がある。例えば、MKL5ではこれをsizeof()で行っているとします。

MKL4ではStringLen()で行うのが正しいのでしょうか?どうすれば正しいのでしょうか?

p.s. 第3のパラメータを送信することに興味がある方は、こちらをご覧ください: http://msdn.microsoft.com/en-us/library/aa365747(v=vs.85).aspx

もちろん、できますよ。MQL4でこの関数を使用した例がこちらに あります。