Bellen named pipes dll van MT5. Hoe?
Page 1 of 634 123 ... LastLast
Results 1 to 10 of 31

Thread: Bellen named pipes dll van MT5. Hoe?

  1. #1
    Mijn uiteindelijke doel is om meerdere MT45-platforms te kunnen gebruiken voor het voeden van een aangepaste toepassing die is geschreven in C #.

    Code MT5 ingevoegd | | \MT5 - zwarte doos C # programlt; --- MT5\ | | MT5
    Op dit moment doet Black Box niets. Ik werk gewoon aan het communiion.

    Ik heb de Client.cs en Server.cs met succes met elkaar gepraat. Wanneer ik PipeServer uitvoer naar een .dll en probeer te laden in MT5, krijg ik de fout. Kan 'SendString' niet vinden in 'PipeServer.dll'. Ik heb alles geprobeerd wat ik kan bedenken. Ik heb talloze online artikelen gelezen en ben nog steeds in cirkels rond.

    C # code voor PipeServer: (let niet op alle reacties, het maakt het eenvoudig om heen en weer te schakelen tussen dll en exe)
    Code ingevoegd met behulp van systeem; met behulp van System.Collections.Generic; met behulp van System.Linq; met behulp van System.Text; met behulp van System.IO.Pipes; met behulp van System.IO; met behulp van System.Diagnostics; met behulp van System.Runtime.InteropServices; met behulp van RGiesecke.DllExport; namespace PipeServer {public class Server {//static void Main (string # 91; # 93; args) # 91; DllExport (SendString, CallingConvention = CallingConvention.StdCall) # 93; public static void SendString (string args) {using (NamedPipeServerStream pipeServer = new NamedPipeServerStream (testpipe, PipeDirection.InOut)) {//Console.WriteLine (NamedPipeServerStream-object gemaakt.);/Wacht tot een client verbinding maakt met/Console.Write (wachten op clientverbinding ...); pipeServer.WaitForConnection ();/Console.WriteLine (Client connected.);/bool Disconnect = false; probeer {//lees gebruikersinvoer en stuur die naar het clientproces. using (StreamWriter sw = nieuwe StreamWriter (pipeServer)) {//string temp;/while (pipeServer.IsConnected! Disconnect)/{sw.AutoFlush = true;/Console.Write (voer tekst in:);/temp = Console.ReadLine ();/if (temp == exit) Disconnect = true;/Disconnect = true; sw.WriteLine (args);/}}}/Vang de IOException die wordt verhoogd als de pipe/broken of disconnected is. ch (IOException e) {Console.WriteLine (ERROR: {0}, e.Message); }}}}}
    C # code voor de PipeClient:
    Code ingevoegd met behulp van systeem; met behulp van System.Collections.Generic; met behulp van System.Linq; met behulp van System.Text; met behulp van System.IO.Pipes; met behulp van System.IO; met behulp van System.Diagnostics; naamruimte PipeClient {public class Client {static void Main (string # 91; # 93; args) {using (NamedPipeClientStream pipeClient = new NamedPipeClientStream (., testpipe, PipeDirection.InOut)) {//Verbinden met de pijp of wachten tot de pijp is beschikbaar. Console.Write (probeert verbinding te maken met pipe ...); pipeClient.Connect (); Console.WriteLine (Verbonden met pipe.); Console.WriteLine (Er zijn momenteel {0} pipe server-instances geopend., PipeClient.NumberOfServerInstances); while (pipeClient.IsConnected) {using (StreamReader sr = new StreamReader (pipeClient)) {//Toon de gelezen tekst aan de console string temp; while ((temp = sr.ReadLine ())! = ) {Console.WriteLine (ontvangen van server: {0}, temp); }}}} Console.Write (Druk op Enter om door te gaan ...); Console.ReadLine (); }}}
    MQL5-code voor EAscript:
    Code ingevoegd/ --------------------------------------------- --------------------- /| TestPipeServer.mq5 |/| Copyright, NONE |/| |/ ----------------------------------------------- ------------------- /# eigenschap script_show_inputs #import PipeServer.dll static void SendString (string args); #import/ --------------------------------------------- --------------------- /| Scriptstart-startfunctie |/ ----------------------------------------------- ------------------- ongeldig OnStart () {Afdrukken (test correct geladen); SendString (test);/als ik deze functieaanroep ken, werkt het script}/ --------------------------------- ---------------------------------
    Testen van C # lt; - C # geeft een doorvoer van meer dan 165.000 tikkenseconde zonder enige aanpassing van de prestaties. Dit is een van de belangrijkste redenen waarom ik een DLL-oplossing wil gebruiken. Ook is het ontwikkelen in C # veel minder beperkend. Ik begrijp dat er manieren zijn om native MQL5-code te gebruiken, maar dat is niet het pad dat ik nastreer.


    Dus mijn algemene vraag is hoe ik mijn SendString correct noem (string someParameter)?
    Het maakt op dit moment niet uit welk gegevenstype ik verzend. Het kan een int, double of string zijn. Ik wil gewoon dat de functionaliteit werkt.


    Alle hulp of suggesties zouden zeer gewaardeerd worden, dus ik kan stoppen


    Bedankt,

    Jason

  2. #2
    ik codeer niet in c # en ik heb nog nooit mt5 gebruikt. maar mijn gok is dat mt5 string type niet gelijk is aan je c # string []. probeer het misschien opnieuw, zodat ze in plaats daarvan een generieke matrixaanwijzer gebruiken.

  3. #3
    Daarom zei ik dat het niet uitmaakte of ik probeerde verschillende gegevenstypen door te geven. Ik heb het ook geprobeerd met int en double. Ik begin nog niet eens met arrays. De regel met Main (string [] args) werd van commentaar voorzien omdat die regel wordt gebruikt wanneer ik de code als een exe wil uitvoeren in plaats van compileer naar een dll.

  4. #4

    Quote Originally Posted by ;
    Daarom zei ik dat het niet uitmaakte of ik probeerde verschillende gegevenstypen door te geven. Ik heb het ook geprobeerd met int en double. Ik begin nog niet eens met arrays. De regel met Main (string [] args) werd van commentaar voorzien omdat die regel wordt gebruikt wanneer ik de code als een exe wil uitvoeren in plaats van compileer naar een dll.
    mijn ogen zijn wazig en ik lees je tekst volledig anders dan je meende. mijn fout. Ik heb nog steeds het vermoeden dat je binnen je dll een aanwijzer moet gebruiken om het adres te ontvangen. ik geloof niet dat je gegevens van buiten een dll kunt doorgeven zoals jij dat hebt gedaan. maar nogmaals, je suggereert dat het werkt wanneer je laadt van een andere exe, alleen niet mt5 .... dus ik zal zwijgen en stoppen met raden.

  5. #5
    Haha ... soms wordt dit spul wazig, daar ben ik het mee eens. Wanneer ik C # naar C # ga, kan ik tekst invoeren in de console. Leeslijn en console. Schrijflijn en laat deze aan de andere kant vullen via de pipe stre. Er waren geen aanwijzingen nodig. Als ik nu kan uitvinden hoe MQL5 hetzelfde kan doen. Ik weet dat ik niet de eerste ben die dit heeft geprobeerd, dus hopelijk als FF-leden kunnen helpen om dit werkend te krijgen, iedereen zal het kunnen gebruiken.

  6. #6
    dit wekte mijn nieuwsgierigheid (bedankt daarvoor). het lijkt erop dat c # de duivel is. van mijn na�ef lezen zijn c # -bibliotheken niet hetzelfde als c -bibliotheken, enzovoort. het hele .net-aspect verandert het spel.
    http://www.vistax64.com/net-general/...c-project.htmlals je de dll in c of fuck kunt schrijven, zelfs delphi (misschien een van de gratis pascal-compilers die rondzweven in deze dagen), dan zou je jezelf misschien een ton hoofdpijn kunnen besparen.

  7. #7
    Het vermogen om dit geschrevenwerken met C # te krijgen is een absolute must. De ultieme routekaart voor wat dit zal werken is gebaseerd op C #. Nee, C # is een deal breaker in mijn situatie. Ik dacht niet dat de C # -bibliotheken het grote probleem waren. Ik heb de client en de server al gepraat via C # (in principe rechtstreeks vanuit MSDN). Het is wanneer ik MT5 introduceer dat het slecht gaat. Iemand hier moet de simpele kleine lekkernij kunnen vinden die ik mis. Tot dan,

  8. #8
    Quote Originally Posted by ;
    Het vermogen om dit geschrevenwerken met C # te krijgen is een absolute must. De ultieme routekaart voor wat dit zal werken is gebaseerd op C #. Nee, C # is een deal breaker in mijn situatie. Ik dacht niet dat de C # -bibliotheken het grote probleem waren. Ik heb de client en de server al gepraat via C # (in principe rechtstreeks vanuit MSDN). Het is wanneer ik MT5 introduceer dat het slecht gaat. Iemand hier moet de simpele kleine lekkernij kunnen vinden die ik mis. Tot dan,
    ik suggereer alleen dat het gedeelte mql lezenschrijven naar pipes in c is als een brug van mt5 naar het besturingssysteem en de pipes. het zou alleen een klein dll moeten zijn, puur ontworpen om te lezenschrijven naar pijpen en niets meer. Daarna is alles wat u doet in uw werkelijke c # main-app niet relevant, omdat u vanuit uw app normaal naar pijpen kunt lezenschrijven. jouw probleem lijkt te zijn, van wat ik kan zien, dat .net bibliotheken anders lijken te zijn dan hoe het vroeger was, en ik veronderstel dat mql45 gebaseerd is op een c bibliotheek, niet .netbibliotheken. dit kan relevant zijn en misschien een nog betere oplossing. ik heb het hele verhaal niet gelezen, maar het lijkt misschien een mql5-oplossing te zijn:
    http://www.mql5.com/en/articles/115Hoe dan ook, ik denk dat ik geen idee�n heb.

  9. #9
    Ik ben erg bekend met dat artikel. Dat is degene die ik eerst heb gebruikt, maar het proberen te krijgen van de NamedPipeServerStream () -functie met alle overlappende overbrengers was een nachtmerrie. Ik probeer zelfs volledig standaard te gaan met dit: Inserted Code # 91; DllExport (Add, CallingConvention = CallingConvention.StdCall) # 93; public static int Add (int left, int right) {keer terug left right; } MQL-code om twee gehele getallen toe te voegen: Ingevoerde code #import PipeServer.dll int Toevoegen (int left, int right); #import/ --------------------------------------------- --------------------- /| Scriptstart-startfunctie |/ ----------------------------------------------- ------------------- void OnStart () {for (int i = 0; ilt; 3; i ) {Print (Add (i, 10)); }} Ik krijg nog steeds dezelfde foutmelding. Het lijkt er niet om te geven of het een complexe functie is, zoals lezenschrijven naarvan een pijp of een eenvoudige toevoegfunctie. Ik denk dat ik het een nacht noem!

  10. #10

    Quote Originally Posted by ;
    Ik ben erg bekend met dat artikel. Dat is degene die ik eerst heb gebruikt, maar het proberen te krijgen van de NamedPipeServerStream () -functie met alle overlappende overbrengers was een nachtmerrie. Ik probeer zelfs volledig standaard te gaan met dit: Inserted Code # 91; DllExport (Add, CallingConvention = CallingConvention.StdCall) # 93; public static int Add (int left, int right) {keer terug left right; } MQL-code om twee gehele getallen toe te voegen: [code] #import PipeServer.dll int Toevoegen (int left, int right); #import/ --------------------------------------------- --------------------- /| ...
    je lijkt hier op de verkeerde manier mee bezig te zijn ... jouw probleem, zoals ik het begrijp, is dat mql45 waarschijnlijk niet ontworpen is met .net in gedachten (puur mijn eigen speculatie) en in plaats daarvan win32 type bibliotheken verwacht tijdens het proberen importeren. Als mijn veronderstelling juist is, kun je proberen het hele jaar op dezelfde manier verder te gaan en nergens heen te komen. het artikel waarnaar ik gelinkt had liet zien hoe een mql5 klasse te implementeren die direct te maken heeft met kernel32.dll pipe calling en zo. je probeert een nooit-werk-gemakkelijk-(of misschien ooit) .net dll in een mql5 script in te voegen om de afhandeling van pijpen af ??????te handelen, maar in plaats daarvan zou je gewoon de pijphandeling rechtstreeks BINNEN mql5 kunnen doen zonder iets anders te importeren dan kernel32 . het lijkt erop dat je het beledigende probleem van het proberen om een ??????bepaalde dll te importeren volledig kunt verwijderen die niet past in de mql5-importmethodologie. kopieer de code in het artikel en importeer kernel32 (als ik het goed lees). voer dan al uw pijphandelingen rechtstreeks uit binnen mql5. of het komt door het feit of .net dll anders is of niet, je zou moeten proberen om de pijphandeling direct in mql5 aan te pakken in plaats van vast te zitten aan de huidige wegversperring van het niet kunnen importeren van een aanstootgevende dll. nogmaals, ik ben onbekend met mql5 en c # dus ik zou in totale onzin kunnen spreken. edit: bekijk ook dit mql4-codevoorbeeld en kopieerplak en herwerk zo nodig om het in mql5 te masseren als het geen 100% compatibele code is: http://www.forum.com/showthread.php?t = 125.117

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
This website uses cookies
We use cookies to store session information to facilitate remembering your login information, to allow you to save website preferences, to personalise content and ads, to provide social media features and to analyse our traffic. We also share information about your use of our site with our social media, advertising and analytics partners.