Zewnetrzny program

O jezykach programowania w platformach i nie tylko.
mlody87
Gaduła
Gaduła
Posty: 192
Rejestracja: 14 cze 2012, 13:19

Zewnetrzny program

Nieprzeczytany post autor: mlody87 »

Hej!
Mam pytanie do Was :) Chcialbym napisac skrypt, ktory uruchamialby zewnetrzny program (zwykly exe'k) i wysylal do niego aktualna cene instrumentu na ktorym zostal uruchomiony. Moglby ktos mi pomoc?:)
tzn jak uruchomic zewnetrzny program juz wiem:

np.
ShellExecuteA(0, "Open", "cmd.exe", "", "C:", 1);
chcialbym teraz wysylac do niego informacje i miec mozliwosc odbierania informacji.
Obrazek

Awatar użytkownika
Pierz Andrzej
Przyjaciel Forum
Przyjaciel Forum
Posty: 1200
Rejestracja: 02 lip 2006, 14:17

Re: Zewnetrzny program

Nieprzeczytany post autor: Pierz Andrzej »

ja to robię przez WinApi :)
Aplikacje okienkową mam napisaną w VS C# , i jak wyżej napisałem komunikacja odbywa się funkcjami WinApi .

możesz np wykorzystać też Named Pipes do wymiany informacji , TCP , UDP sposobów jest sporo ;)
z poważaniem
Andrzej Pierz
FOREX-SERVICE

mlody87
Gaduła
Gaduła
Posty: 192
Rejestracja: 14 cze 2012, 13:19

Re: Zewnetrzny program

Nieprzeczytany post autor: mlody87 »

A mysli Pan, ze za pomoca plikow to byloby 'ciezkie' rozwiazanie? ;)
Obrazek

Awatar użytkownika
Pierz Andrzej
Przyjaciel Forum
Przyjaciel Forum
Posty: 1200
Rejestracja: 02 lip 2006, 14:17

Re: Zewnetrzny program

Nieprzeczytany post autor: Pierz Andrzej »

Ciężkie nie , ale zasobożerne i wolne . Także polecam się przyglądnąć NamedPipes
http://www.forexfactory.com/showthread.php?t=125117
z poważaniem
Andrzej Pierz
FOREX-SERVICE

mlody87
Gaduła
Gaduła
Posty: 192
Rejestracja: 14 cze 2012, 13:19

Re: Zewnetrzny program

Nieprzeczytany post autor: mlody87 »

Hej!:)
Nie moglem ogarnac NamedPipes takze zabralem sie za komunikaty i WM_COPYDATA. Aplikacje zewnetrzna juz mam i odbiera ona komunikaty i odsyla odpowiedzi.
Mam tylko problem jak wyslac komunikat i odebrac odpowiedz w mql. MQL to chyba zbyt ubogi jezyk zeby mogl to zrobic 'samodzielnie'. Musze skorzystac z jakies zewnetrznej biblioteki?
Znalazlem cos takieg:
http://codebase.mql4.com/source/23821
Tylko nie bardzo wiem jak to ugryzc ;) (Nigdy nie programowalem w mql ani c++ wiec ucze sie na biezaco :P)
pozdrawiam!
Obrazek

dulf
Pasjonat
Pasjonat
Posty: 399
Rejestracja: 24 kwie 2010, 15:13

Re: Zewnetrzny program

Nieprzeczytany post autor: dulf »

http://forum.mql4.com/6610#29917
Trochę hakerka , z teoretycznej teorii moim zdaniem jest to do zrobienia ale aby odbierać komunikaty w tym WM_COPYDATA potrzebna jest pętla komunikatów powiązana z konkretnym oknem.
Czyli np dll wywoływany z MQL mógłby tworzyć takie okno i przy pomocy fun, wołanej z MQL ewent zwracać jakieś dane do ea.
Proponowałbym jednak spróbować dostępnych gotowych rozwiązań,jeśli nie masz doświadczenia w programowaniu ponieważ są to zagadnienia zaawansowane.
Stosunkowo prosto można uzyskać obszar pamięci dostępny dla kodu MQL i aplikacji zewnętrznej za pomocą
http://msdn.microsoft.com/en-us/library ... s.85).aspx
tu:
http://forum.mql4.com/ru/39300
Nie spiesz się , zawsze zdążysz stracić .

mlody87
Gaduła
Gaduła
Posty: 192
Rejestracja: 14 cze 2012, 13:19

Re: Zewnetrzny program

Nieprzeczytany post autor: mlody87 »

Dzięki :) Będę walczyć:)

-- Dodano: wt 14-05-2013, 18:33 --

hmm tak sie zastanawiam, stworzylem sobie obszar i za pomoca zewnetrznego programu moge zapisywac i czytac. Jednak po stronie MT jakos nie bardzo wiem jak sie za to zabrac:

Kod: Zaznacz cały

//+------------------------------------------------------------------+
//|                                           ExpertSharedMemory.mq4 |
//|                      Copyright © 2010, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
#import "SharedMemoryDLL.dll"    
string GetStringValue(string);
#import
extern string Function_W_R = " ";
extern string Read_Write_Buffer = " ";
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   string sret;

//---- simple dll-functions call
   if (Function_W_R != "W" && Function_W_R != "R")
   {
    Print("Îřčáęŕ: Ęîä îďĺđŕöčč ěîćĺň áűňü W-çŕďčńü â đŕçäĺë˙ĺěóţ ďŕě˙ňü, čëč R-×ňĺíčĺ čç đŕçäĺë˙ĺěîé ďŕě˙ňč");
    return;
   }
   sret = StringConcatenate(Function_W_R,Read_Write_Buffer);
   sret=GetStringValue(sret);
   if (sret == " ") 
   {
    Print("Îřčáęŕ ďđč âűďîëíĺíčĺ îďĺđŕöčč - " + Function_W_R);
    return;
   } 
   Read_Write_Buffer = StringSubstr(sret,1);
   if (Function_W_R == "W")
      Comment("Ďîńëĺäí˙˙ îďĺđŕöč˙ ń Đŕçäĺë˙ĺěîé Ďŕě˙ňüţ áűëŕ îďĺđŕöč˙: " + Function_W_R + "\n"+
              "Çŕďčńŕíî  â   Đŕçäĺë˙ĺěóţ Ďŕě˙ňü : ",Read_Write_Buffer);  
   else         
      Comment("Ďîńëĺäí˙˙ îďĺđŕöč˙ ń Đŕçäĺë˙ĺěîé Ďŕě˙ňüţ áűëŕ îďĺđŕöč˙: " + Function_W_R + "\n"+
              "Ďđî÷čňŕíî čç  Đŕçäĺë˙ĺěîé Ďŕě˙ňč : ",Read_Write_Buffer);
            
   Function_W_R = " ";
   Read_Write_Buffer = " ";            
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| array functions call                                             |
//+------------------------------------------------------------------+
int start()
  {
//---  
   return(0);
//---   
  }
//+------------------------------------------------------------------+
Niby
Function_W_R = "R" - odczytywanie

Function_W_R = "W" – zapis

ale poza tym nie czaje zbytnio gdzie tu zapisac a gdzie odczytac... do tej zmiennej "sret" musze podawac tresc ?
Obrazek

mlody87
Gaduła
Gaduła
Posty: 192
Rejestracja: 14 cze 2012, 13:19

Re: Zewnetrzny program

Nieprzeczytany post autor: mlody87 »

Rozwiazalem problem bardzo latwo za pomoca pamieci wspoldzielonej ;) Stosunkowo latwo to zaimplementowac w MQL ;)
Obrazek

ODPOWIEDZ