从MT5调用命名管道dll。如何?
1 页面的第 524 页 123 ... 上一个上一个
Results 1 to 10 of 31

Thread: 从MT5调用命名管道dll。如何?

  1. #1
    我的最终目标是能够使用多个MT45平台来提供用C#编写的自定义应用程序。

    插入代码MT5 | | \MT5 - 黑盒子C#programlt; --- MT5\ | | MT5
    目前,黑匣子什么也没做。我正在努力进行沟通。

    我有Client.cs和Server.cs成功地相互交谈。当我将PipeServer输出到.dll并尝试在MT5中加载时,我收到错误,在'PipeServer.dll'中找不到'SendString'。我已经尝试了所有我能想到的东西。我已经阅读了大量的在线文章,我仍在圈子里。

    PipeServer的C#代码:(不介意所有注释。它只是让它更容易在dll和exe之间来回切换)
    使用System插入代码;使用System.Collections.Generic;使用System.Linq;使用System.Text;使用System.IO.Pipes;使用System.IO;使用System.Diagnostics;使用System.Runtime.InteropServices;使用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(NatatedPipeServerStream对象已创建。);/等待客户端连接//Console.Write(等待客户端连接...); pipeServer.WaitForConnection();/Console.WriteLine(客户连接。);/bool Disconnect = false;尝试{//读取用户输入并将其发送到客户端进程。 using(StreamWriter sw = new StreamWriter(pipeServer)){//string temp;/while(pipeServer.IsConnected!Disconnect)//{sw.AutoFlush = true;/Console.Write(输入文字:);/temp = Console.ReadLine();/if(temp == exit)Disconnect = true;/Disconnect = true; sw.WriteLine(参数);/}}}/捕获管道被破坏或断开时引发的IOException。 ch(IOException e){Console.WriteLine(ERROR:{0},e.Message); }}}}}
    PipeClient的C#代码:
    使用System插入代码;使用System.Collections.Generic;使用System.Linq;使用System.Text;使用System.IO.Pipes;使用System.IO;使用System.Diagnostics; namespace PipeClient {public class Client {static void Main(string#91;#93; args){using(NamedPipeClientStream pipeClient = new NamedPipeClientStream(。,testpipe,PipeDirection.InOut)){//连接到管道或等到管道是可用的。 Console.Write(试图连接管道......); pipeClient.Connect(); Console.WriteLine(连接到管道。); Console.WriteLine(当前有{0}管道服务器实例打开。,pipeClient.NumberOfServerInstances); while(pipeClient.IsConnected){using(StreamReader sr = new StreamReader(pipeClient)){//将读取的文本显示到控制台字符串temp; while((temp = sr.ReadLine())!= ){Console.WriteLine(从服务器接收:{0},temp); Console.Write(按Enter继续......);到Console.ReadLine(); }}}
    EA脚本的MQL5代码:
    插入的代码// --------------------------------------------- --------------------- /| TestPipeServer.mq5 |/|版权所有,无|/| |/ ----------------------------------------------- ------------------- /#property script_show_inputs #import PipeServer.dll static void SendString(string args); #import/ --------------------------------------------- --------------------- /|脚本程序启动功能|/ ----------------------------------------------- ------------------- void OnStart(){打印(测试加载正确); SendString(测试);/如果我注释掉这个函数调用,脚本可以工作}/ --------------------------------- ---------------------------------
    测试C#lt; - C#在没有任何性能调整的情况下提供超过165,000个秒/秒的吞吐量。这是我想要使用DLL解决方案的主要原因之一。此外,在C#中开发的限制要少得多。我确实理解有使用本机MQL5代码的方法,但这不是我追求的路径。


    所以我的整体问题是如何正确调用我的SendString(字符串someParameter)?
    目前我发送的数据类型无关紧要。它可以是int,double或string。我只想让功能正常运行。


    任何帮助或建议将不胜感激,所以我可以停止


    谢谢,

    贾森

  2. #2
    我不用c#编码,我从来没用过mt5。但我的猜测是mt5字符串类型不等同于你的c#string []。也许尝试重新处理它,以便他们使用一些通用数组指针代替。

  3. #3
    这就是为什么我说如果我尝试传递不同的数据类型并不重要。我用int和double尝试过它。我还没有进入阵列。具有Main(string [] args)的行被注释掉了,因为当我想将代码作为exe运行而不是编译为dll时使用该行。

  4. #4

    Quote Originally Posted by ;
    这就是为什么我说如果我尝试传递不同的数据类型并不重要。我用int和double尝试过它。我还没有进入阵列。具有Main(string [] args)的行被注释掉了,因为当我想将代码作为exe运行而不是编译为dll时使用该行。
    我的眼睛模糊不清,我完全阅读你的文字的方式不同于你的意思。我的错。我仍怀疑你的dll中你需要使用指针类型来接收地址。我不相信你可以用你的方式从dll外部传递数据。但是再次你建议它从另一个exe加载时工作,而不是mt5 ....所以我会闭嘴并停止猜测。

  5. #5
    哈哈...有时候这个东西确实变得模糊,我同意。将C#转到C#时,我可以在Console.Readline和Console.Writeline中输入文本,并通过管道输入在另一侧填充。没有指针需要。现在,如果我能弄清楚如何让MQL5做同样的事情。我知道我不是第一个试过这个的人,所以如果FF成员可以帮助实现这个目标,每个人都可以使用它。

  6. #6
    这激起了我的好奇心(感谢你的btw)。似乎c#是魔鬼。从我天真的阅读c#库与c 库等不同。整个.net方面改变了游戏。
    http://www.vistax64.com/net-general/...c-project.html如果你可以用c 编写dll,或者他妈的,甚至是delphi(也许是这些日子里流行的免费pascal编译器之一),那么你可能会为自己省去一些头痛。

  7. #7
    使用C#编写/使用它的能力是绝对必要的。这将与C#相关的最终路线图。在我的情况下,没有C#是一个交易破坏者。我不认为C#库是个大问题。我已经让客户端和服务器严格通过C#进行通信(基本上直接来自MSDN)。当我介绍MT5时,事情变得糟糕。这里有人必须能够发现我所缺少的简单小花絮。直到那时,

  8. #8
    Quote Originally Posted by ;
    使用C#编写/使用它的能力是绝对必要的。这将与C#相关的最终路线图。在我的情况下,没有C#是一个交易破坏者。我不认为C#库是个大问题。我已经让客户端和服务器严格通过C#进行通信(基本上直接来自MSDN)。当我介绍MT5时,事情变得糟糕。这里有人必须能够发现我所缺少的简单小花絮。直到那时,
    我只是建议读取/写入管道部分的mql在c 中作为mt5到操作系统和管道的桥梁。它应该只是一个纯粹设计用于读取/写入管道的小dll,仅此而已。在那之后,无论你在实际的c#主应用程序中做什么都是无关紧要的,因为你可以正常地从你的应用程序中读取/写入管道。从我所知道的,你的问题似乎是.net库看起来与之前的情况有所不同,我假设mql45基于c 库,而不是.net库。这可能是相关的,也许是更好的解决方案。我没有阅读整个内容,但它似乎可能是一个mql5解决方案:
    http://www.mql5.com/en/articles/115无论如何,我认为我没有想法。

  9. #9
    我对这篇文章非常熟悉。这是我首先使用的那个,但试图获得NamedPipeServerStream()函数与所有匹配的上传器是一个噩梦。我甚至试图完全基本化:插入代码#91; DllExport(Add,CallingConvention = CallingConvention.StdCall)#93; public static int Add(int left,int right){return left right; MQL代码添加两个整数:Inserted Code #import PipeServer.dll int Add(int left,int right); #import/ --------------------------------------------- --------------------- /|脚本程序启动功能|/ ----------------------------------------------- ------------------- void OnStart(){for(int i = 0; ilt; 3; i ){Print(Add(i,10));我仍然得到同样的错误。它似乎并不关心它是否是一个复杂的功能,如读/写管道或简单的添加功能。我想我称之为晚上!

  10. #10

    Quote Originally Posted by ;
    我对这篇文章非常熟悉。这是我首先使用的那个,但试图获得NamedPipeServerStream()函数与所有匹配的上传器是一个噩梦。我甚至试图完全基本化:插入代码#91; DllExport(Add,CallingConvention = CallingConvention.StdCall)#93; public static int Add(int left,int right){return left right; MQL代码添加两个整数:[code] #import PipeServer.dll int Add(int left,int right); #import/ --------------------------------------------- --------------------- /| ...
    你似乎以错误的方式解决这个问题......你的问题,据我所知,mql45可能不是用.net设计的(纯粹是我自己的推测),而是在尝试时期望win32类型的库进口。如果我的假设是正确的那么你可以继续尝试以同样的方式全年去做,并且无处可去。我链接的文章展示了如何实现一个mql5类,它将直接处理kernel32.dll管道调用等等。你试图在mql5脚本中插入一个永远不会工作的(或者可能永远的).net dll来处理管道处理,但是你可以直接使用mql5进行管道处理,而不需要导入除kernel32以外的任何东西。看来你可以完全删除尝试导入一个不适合mql5导入方法的特定DLL的有问题的问题。复制文章中的代码,然后导入kernel32(如果我正确读取)。然后直接在mql5中完成所有管道处理。无论是因为.net dll的不同还是不同,你应该尝试直接在mql5中处理管道处理,而不是卡在当前不能导入有问题的dll的路障中。再次,我不熟悉mql5和c#所以我可能会说完全糟糕。编辑:也看看这个mql4代码示例,只需复制/粘贴并重新工作,如果它不是100%兼容的代码,按摩它到mql5:http://www.forum.com/showthread.php?t = 125117

发布权限

  • 您不可发布新主题
  • 您不可回复
  • 您不可发布附件
  • 您不可编辑您的帖子
  •  
  • BB代码是打开的
  • 表情符号是打开的
  • [IMG]代码是打开的
  • [视频]代码是打开的
  • HTML代码是关闭的
histoforex网站使用cookie 文字跟踪
histoforex网站使用cookie 文字跟踪,某些设定已经固定。您可以点击此处阅读我们的Cookie使用说明。 请点击右键接受我们的cookies。如果您选择继续使用histoforex网站,我们将认为您接受我们的cookies。