ich brächte mal euere Hilfe .
Mein Ziel ist es Programm übergreifend Nachrichten zu senden.Programme: 2 x Metatrader 4 und 1x vb.net Programm .
Senden und empfangen zwischen Metatrder 4 geht einwandfrei.Senden von vb.net zu Metatreader 4 geht.
Empfangen mit vb.net geht nicht .
Bekomme immer 0 wen ich den Buffer auslese
Benutze hierzu die FXBlueQuickChannel.dll von Fx blue.
Link: fxblue.com/appstore/9/quickchannel
User Guid : fxblue.com/appstore/u9/quickchannel/user-guide
danke für euerer Hilfe.
Metatrader4 Sender: Sprache: mq4
Empfänger Metatrader4. Sprachen mq4
Nun zu VB.net code
Der Sender:
Der Empfänger vb.net
Über Hilfe wäre ich sehr Dankbar. weis nicht weiter
BG
Mein Ziel ist es Programm übergreifend Nachrichten zu senden.Programme: 2 x Metatrader 4 und 1x vb.net Programm .
Senden und empfangen zwischen Metatrder 4 geht einwandfrei.Senden von vb.net zu Metatreader 4 geht.
Empfangen mit vb.net geht nicht .
Bekomme immer 0 wen ich den Buffer auslese
Benutze hierzu die FXBlueQuickChannel.dll von Fx blue.
Link: fxblue.com/appstore/9/quickchannel
User Guid : fxblue.com/appstore/u9/quickchannel/user-guide
danke für euerer Hilfe.
Metatrader4 Sender: Sprache: mq4
VB.NET-Quellcode
- #import "FXBlueQuickChannel.dll"
- int QC_StartSenderW(string);
- int QC_ReleaseSender(int);
- int QC_SendMessageW(int, string&, int);
- bool eins = false;
- #import
- int glbHandle = 0;
- void OnInit()
- {
- glbHandle = QC_StartSenderW("TestChannel");
- Alert(glbHandle);
- }
- void OnDeinit(const int reason)
- {
- QC_ReleaseSender(glbHandle);
- glbHandle = 0;
- }
- void OnTick()
- {
- //ms();
- }
- void ms ()
- {
- if(eins==false){
- eins = false;
- string strMsg = "Hello @ 2" ;
- if (!QC_SendMessageW(glbHandle, strMsg , 3)) {
- Alert("Message failed");
- }
- }
- }
Empfänger Metatrader4. Sprachen mq4
VB.NET-Quellcode
- #import "FXBlueQuickChannel.dll"
- int QC_StartReceiverW(string, int);
- int QC_ReleaseReceiver(int);
- int QC_GetMessages5W(int, uchar&[], int);
- int QC_CheckChannel(string);
- int QC_CheckChannel (string);
- string a;
- string b;
- string c;
- #import
- #define QC_BUFFER_SIZE 10000
- int glbHandle = 0;
- uchar glbBuffer[]; // Allocated on initialisation
- void OnInit()
- {
- // Do initialisation in OnTick (or OnStart), not in OnInit()
- }
- void OnDeinit(const int reason)
- {
- if (glbHandle) QC_ReleaseReceiver(glbHandle);
- glbHandle = 0;
- }
- void OnTick()
- {
- // Create handle and buffer if not already done (i.e. on first tick)
- if (!glbHandle) {
- glbHandle = QC_StartReceiverW("TestChannel", WindowHandle(Symbol(), Period()));
- ArrayResize(glbBuffer, QC_BUFFER_SIZE);
- }
- if (glbHandle) {
- int res = QC_GetMessages5W(glbHandle, glbBuffer, QC_BUFFER_SIZE);
- if (res > 0) {
- string strMsg = CharArrayToString(glbBuffer, 0, res);
- int zz;
- zz = strMsg;
- Alert(strMsg);
- }
- } else {
- Print("No handle");
- }
- }
- void test()
- {
- }
Nun zu VB.net code
VB.NET-Quellcode
- Imports System.Runtime.InteropServices
- Public Class Form1
- <DllImport("FXBlueQuickChannel.dll", CharSet:=CharSet.Unicode)>
- Public Shared Function QC_StartSenderW(ByVal ChannelName As String) As Integer
- End Function
- <DllImport("FXBlueQuickChannel.dll", CharSet:=CharSet.Unicode)>
- Public Shared Function QC_SendMessageW(ChannelHandle As Integer, Msg As String, Flags As Integer) As Integer
- End Function
- <DllImport("FXBlueQuickChannel.dll")>
- Public Shared Function QC_ReleaseSender(CannelHandle As IntPtr) As Integer
- End Function
- <DllImport("FXBlueQuickChannel.dll", CharSet:=CharSet.Unicode)>
- Public Shared Function QC_StartReceiverW(ByVal ChannelName As String, ChannelHandle As IntPtr) As IntPtr
- End Function
- <DllImport("FXBlueQuickChannel.dll")>
- Public Shared Function QC_ReleaseReceiver(ByVal ChannelHandle As IntPtr) As Integer
- End Function
- <DllImport("FXBlueQuickChannel.dll")>
- Public Shared Function QC_GetMessage5W(ByVal ChannelHandle As Long, ByVal Buffer As String, ByVal BufferSize As Long) As String
- End Function
- <DllImport("FXBlueQuickChannel.dll")>
- Public Shared Function QC_StartReceiver(ByVal ChannelName As String, ByVal WindowHandle As Long) As Long
- End Function
- <DllImport("FXBlueQuickChannel.dll")>
- Public Shared Function QC_GetMessage2W(ByVal Channelhandel As Integer) As String
- End Function
Der Sender:
VB.NET-Quellcode
- Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- glbHandle = QC_StartSenderW("TestChannel")
- MsgBox(glbHandle)
- Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
- Dim Buy As String = "OrderSend(Symbol(),OP_BUY,0.01,Ask,1,0,0,NULL,0,0,clrGreen)"
- QC_SendMessageW(glbHandle, Buy, 3)
- End Sub
- End Sub
Der Empfänger vb.net
VB.NET-Quellcode
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- Dim a
- a = QC_StartReceiverW("Testcanel", 1)
- TextBox1.Text = a.ToString
- Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
- Dim Buffer As String
- Dim szBuffer As Long
- Dim Res As Long
- Dim qchandle
- qchandle = QC_StartReceiver("TestChannel", 1)
- szBuffer = 100000
- Buffer = Space$(szBuffer + 1)
- Res = QC_GetMessage5W(qchandle, Buffer, szBuffer)
- If Res > 0 Then
- Dim strResult As String
- strResult = Buffer & " " & Res
- TextBox1.Text = strResult
- ElseIf Res = 0 Then
- ' No messages
- Else
- ' Error, e.g. buffer too short
- End If
- End Sub
- End Sub
Über Hilfe wäre ich sehr Dankbar. weis nicht weiter
BG