创建您自己的MetaTrader扩展(dll)。 - 页 3 12345678910...15 新评论 [删除] 2008.05.23 17:53 #21 真正的C++问题...MT4的外部DLL 大家好。 我有一个用C++编写的外部DLL。然而,我对C++还很陌生,所以我想这可能是我遇到这个问题的原因。我有另一个用C#编写的版本,工作得很好,只是为了使C# DLLs可以被MQL调用,我必须改变它们,而这种改变似乎会导致小的内存泄漏。我希望这里有人能帮助我解决C++版本的问题。情况是这样的。 我一直在慢慢开发各种交易策略编程库。我想做的事情之一是为各种事情开发一套一致的服务,如记录、锁定(对资源的线程安全访问)和事件通知。因此,基本上,我正试图把MQL拉到一个更现代的编程范式中。总之,目前我正在开发一个库,它将允许EA接收各种交易事件 的通知(放置、填充、关闭)。这些事件可能是由事件订阅的EA或其他EA进行的交易的结果。为了实现这一目标,我使用了一个外部DLL,它基本上通过消息传递促进EA之间的通信。有一个发布EA,它只是寻找新的交易事件,当一个事件发生时,它把消息放到订阅EA的队列中(每个订阅者都有自己的队列)。 所以问题是这样的......只要每次只传递一条消息,一切都能正常工作。很明显,这完全不能接受。当一次传递多条消息时,我发现第一条消息被破坏了(它一直将消息返回为 "1",而它应该是 "FILLED,1005167 "这样的消息)。第二条信息是好的,但第一条却不是。我还没有测试过两条以上的信息,但估计我们还是会看到同样的情况。 如果有人知道我做错了什么,并能为我的问题提供一些启示,我将非常高兴。有几点说明。1)我最终将在Apache 2.0下发布这段代码,所以这个源文件也是在Apache 2.0下发布的......我打算在它工作得相当顺利的时候向社区发布。2)我在这里反复说'队列',但如果你看一下源代码,你会发现我用一个向量来代替,基本上像堆栈一样使用它。最初我有一个队列,但把它改成了矢量,只是担心我在STL队列中做了一些我没有意识到的错误。没有这样的运气。真正的实现将是一个队列,但现在队列和矢量都没有为我正确工作。 提前感谢你的任何见解。 Brandon Wilhite 附加的文件: mqlservices.zip 3 kb [删除] 2008.05.23 18:04 #22 既然我在这里,我想我应该分享我的经验。 你想做的事当然可以做,我自己也做过很多次。 当我第一次开始写DLLs用于MT4时,我无法在C++中工作。 我认为问题在于我的项目设置在Visual Studio中总是不正确(有那么多的d@$%)。 最近,我从CodeGuru那里找到了一个例子,我确实能够编译和使用它。 现在我基本上把那个项目清理掉了,把它作为一个模板。 同时,我一直在写C# DLLs,并使用这里的 这个优秀工具。 基本上,它采取了IL,并改变了它,使它可以从非托管代码中调用。 唯一的问题是,这样做时,MT4似乎出现了内存泄漏。 我还没有确定是由于MT4还是改变了IL,还是什么原因,但它发生了。 下一步,我将学习在C++上编写包装器和/或直接去学习C++。 希望这能解决内存的问题。 总之,你想做的事情肯定是可以完成的。 我已经设法用C#为MT4编写了一些相当复杂的DLL,包括像远程、原始套接字、http、WinForms等东西。 几乎所有你能用.NET做的事情都可以通过这种方式从MT4调用(你说的,我可能已经做过了)。 而且它非常可靠。 唯一的问题是内存泄漏比较慢。 Magick: 谢谢你,帕特里克这是一个非常有趣的想法,使用FTP。 然而,我确实希望能够与MT互动--将tick和candle信息发送到.net应用程序,而这个应用程序则向MT反馈何时进行交易。 我发现了这个,我想可能会有帮助 -简化的包装和界面生成器 然而,我是一个相当初级的程序员,并不完全了解有一个C++包装的中间层所涉及的内容。 我很想听听你的意见,如果你认为这是一个有用的工具,可以用来帮助在c++和.net之间建立桥梁? Anton Hughes 2008.05.29 18:18 #23 bwilhite: 既然我在这里,我想我应该分享我的经验。 你想做的事当然可以做到,我自己也做过很多次。 当我第一次开始写DLLs用于MT4时,我无法在C++中工作。 我认为问题在于我在Visual Studio中的项目设置总是不正确(有很多这样的项目)。 最近,我从CodeGuru那里找到了一个例子,我确实能够编译和使用它。 现在我基本上把那个项目清理掉了,把它作为一个模板。 同时,我一直在写C# DLLs,并使用这里的 这个优秀工具。 基本上,它采取了IL,并改变了它,使它可以从非托管代码中调用。 唯一的问题是,这样做时,MT4似乎出现了内存泄漏。 我还没有确定是由于MT4还是改变了IL,还是什么原因,但它发生了。 下一步,我将学习在C++上编写包装器和/或直接去学习C++。 希望这能解决内存的问题。 总之,你想做的事情肯定可以完成。 我已经设法用C#为MT4编写了一些相当复杂的DLL,包括像远程、原始套接字、http、WinForms等东西。 几乎所有你能用.NET做的事情都可以通过这种方式从MT4调用(你说的,我可能已经做了)。 而且它非常可靠。 唯一的问题是内存泄漏比较慢。 bwilhite 你是个救世主! 这看起来是个不错的工具。你是否有一个c#项目来演示从c#中与MT进行通信?我想做的是让我的.net应用程序告诉MT何时交易。或者你可以推荐一个可以帮助我的链接。如果有任何帮助,我将不胜感激。 Vlad Vahnovanu 2008.08.06 06:34 #24 非常非常感谢! Latino 2008.08.21 07:58 #25 Dll 你好。 DLL是否可以用来通过excel电子表格 发送和接收订单? 我在哪里可以了解到DLL的这个方面。 尊敬的先生 拉蒂诺 RealFx 2008.09.20 01:14 #26 codersguru:任何对创建他/她自己的MetaTrader扩展(dll)感兴趣的人可以去。 创建您自己的MetaTrader扩展(dll) - 第一部分 创建您自己的MetaTrader扩展(dll) - 第二部分 还会有另一部分(或两部分),我正在写这些内容 希望你能喜欢它们! 请将您的课程更新为Visual C++ 2008 Express Edition。 [删除] 2008.11.11 17:54 #27 bwilhite: 既然我在这里,我想我应该分享我的经验。 你想做的事当然可以做,我自己也做过很多次。 当我第一次开始写DLLs用于MT4时,我无法在C++中工作。 我认为问题在于我在Visual Studio中的项目设置总是不正确(有很多这样的项目)。 最近,我从CodeGuru那里找到了一个例子,我确实能够编译和使用它。 现在我基本上把那个项目清理掉了,把它作为一个模板。 同时,我一直在写C# DLLs,并使用这里的 这个优秀工具。 基本上,它采取了IL,并改变了它,使它可以从非托管代码中调用。 唯一的问题是,这样做时,MT4似乎出现了内存泄漏。 我还没有确定是由于MT4还是改变了IL,还是什么原因,但它发生了。 下一步,我将学习在C++上编写包装器和/或直接去学习C++。 希望这能解决内存的问题。 总之,你想做的事肯定可以完成。 我已经设法用C#为MT4编写了一些相当复杂的DLL,包括像远程、原始套接字、http、WinForms等东西。 几乎所有你能用.NET做的事情都可以通过这种方式从MT4调用(你说的,我可能已经做了)。 而且它非常可靠。 唯一的问题是内存泄漏比较慢。 你能确定这个缓慢泄漏的来源吗,bwilhite? 如果你还愿意的话,我很感谢你在这方面的帮助。 目前,我正在寻找一个简单的mql dll,它可以让我通过socket发送和接收消息。 我对c#的基础知识很熟悉,所以如果我能够找到一种方法来利用,那就更好了。 谢谢。 [删除] 2008.11.11 19:29 #28 Magick: bwilhite 你是一个生命的救星! 这看起来是个不错的工具。你是否有一个c#项目来演示从c#中与MT进行通信?我想做的是让我的.net应用程序告诉MT何时进行交易。或者你可以推荐一个可以帮助我的链接。如果有任何帮助,我将不胜感激。 你对这个马吉克有什么收获吗? 这正是我想做的事情--让.net应用程序告诉MT什么时候和什么交易。 如果你已经找到了解决方案,请让我知道。 我也很欣赏并希望从bwihite那里听到更多。 你是否有任何可以分享的c# dlls样本。 谢谢! Jason 2009.02.20 02:52 #29 我一直在研究自己的DLL,遇到了127个错误。 .cpp文件包含(除其他外)。 MT4_EXPFUNC char* _stdcall DLLtest() { return("testing!"); } [/CODE] header file contains: #define MT4_EXPFUNC __declspec(dllexport) MT4 file: [CODE] #import "mydll.dll" string DLLtest(); 当然这并不是所有的内容,但这是相关的信息。现在,根据我的理解,我已经有了一切,可以尝试从MT4调用该函数。 由于某些原因,它只是没有 "看到 "它的存在。我以为是我的 DLL 缺少一个 .def 文件,但即使手动创建了一个文件,仍然无法工作。另外,我相信MT4_EXPFUNC一行意味着该函数无论如何都会被导出,所以.def文件是不必要的。整个编译过程很顺利,EA运行良好,直到我试图调用该函数(因为它看不到),然后它就停止了。 我一筹莫展。我真的认为这是一个.def的问题,但我越想越觉得不是这样的。 顺便说一下,我使用的是Visual C++ 2008 Express... 谢谢你的任何见解。 -杰森 Create your own MetaTrader Dll doesn't work from DLL error 126 MG_1 2009.02.23 23:39 #30 我在使用Visual C++ 2008 Express时也出现了同样的127错误。目前还没有解决方案,如果我找到了,我会把它贴出来。 12345678910...15 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
真正的C++问题...MT4的外部DLL
大家好。
我有一个用C++编写的外部DLL。然而,我对C++还很陌生,所以我想这可能是我遇到这个问题的原因。我有另一个用C#编写的版本,工作得很好,只是为了使C# DLLs可以被MQL调用,我必须改变它们,而这种改变似乎会导致小的内存泄漏。我希望这里有人能帮助我解决C++版本的问题。情况是这样的。
我一直在慢慢开发各种交易策略编程库。我想做的事情之一是为各种事情开发一套一致的服务,如记录、锁定(对资源的线程安全访问)和事件通知。因此,基本上,我正试图把MQL拉到一个更现代的编程范式中。总之,目前我正在开发一个库,它将允许EA接收各种交易事件 的通知(放置、填充、关闭)。这些事件可能是由事件订阅的EA或其他EA进行的交易的结果。为了实现这一目标,我使用了一个外部DLL,它基本上通过消息传递促进EA之间的通信。有一个发布EA,它只是寻找新的交易事件,当一个事件发生时,它把消息放到订阅EA的队列中(每个订阅者都有自己的队列)。
所以问题是这样的......只要每次只传递一条消息,一切都能正常工作。很明显,这完全不能接受。当一次传递多条消息时,我发现第一条消息被破坏了(它一直将消息返回为 "1",而它应该是 "FILLED,1005167 "这样的消息)。第二条信息是好的,但第一条却不是。我还没有测试过两条以上的信息,但估计我们还是会看到同样的情况。
如果有人知道我做错了什么,并能为我的问题提供一些启示,我将非常高兴。有几点说明。1)我最终将在Apache 2.0下发布这段代码,所以这个源文件也是在Apache 2.0下发布的......我打算在它工作得相当顺利的时候向社区发布。2)我在这里反复说'队列',但如果你看一下源代码,你会发现我用一个向量来代替,基本上像堆栈一样使用它。最初我有一个队列,但把它改成了矢量,只是担心我在STL队列中做了一些我没有意识到的错误。没有这样的运气。真正的实现将是一个队列,但现在队列和矢量都没有为我正确工作。
提前感谢你的任何见解。
Brandon Wilhite
既然我在这里,我想我应该分享我的经验。 你想做的事当然可以做,我自己也做过很多次。
当我第一次开始写DLLs用于MT4时,我无法在C++中工作。 我认为问题在于我的项目设置在Visual Studio中总是不正确(有那么多的d@$%)。 最近,我从CodeGuru那里找到了一个例子,我确实能够编译和使用它。 现在我基本上把那个项目清理掉了,把它作为一个模板。
同时,我一直在写C# DLLs,并使用这里的 这个优秀工具。 基本上,它采取了IL,并改变了它,使它可以从非托管代码中调用。 唯一的问题是,这样做时,MT4似乎出现了内存泄漏。 我还没有确定是由于MT4还是改变了IL,还是什么原因,但它发生了。
下一步,我将学习在C++上编写包装器和/或直接去学习C++。 希望这能解决内存的问题。
总之,你想做的事情肯定是可以完成的。 我已经设法用C#为MT4编写了一些相当复杂的DLL,包括像远程、原始套接字、http、WinForms等东西。 几乎所有你能用.NET做的事情都可以通过这种方式从MT4调用(你说的,我可能已经做过了)。 而且它非常可靠。 唯一的问题是内存泄漏比较慢。
谢谢你,帕特里克
这是一个非常有趣的想法,使用FTP。
然而,我确实希望能够与MT互动--将tick和candle信息发送到.net应用程序,而这个应用程序则向MT反馈何时进行交易。
我发现了这个,我想可能会有帮助 -简化的包装和界面生成器
然而,我是一个相当初级的程序员,并不完全了解有一个C++包装的中间层所涉及的内容。
我很想听听你的意见,如果你认为这是一个有用的工具,可以用来帮助在c++和.net之间建立桥梁?既然我在这里,我想我应该分享我的经验。 你想做的事当然可以做到,我自己也做过很多次。
当我第一次开始写DLLs用于MT4时,我无法在C++中工作。 我认为问题在于我在Visual Studio中的项目设置总是不正确(有很多这样的项目)。 最近,我从CodeGuru那里找到了一个例子,我确实能够编译和使用它。 现在我基本上把那个项目清理掉了,把它作为一个模板。
同时,我一直在写C# DLLs,并使用这里的 这个优秀工具。 基本上,它采取了IL,并改变了它,使它可以从非托管代码中调用。 唯一的问题是,这样做时,MT4似乎出现了内存泄漏。 我还没有确定是由于MT4还是改变了IL,还是什么原因,但它发生了。
下一步,我将学习在C++上编写包装器和/或直接去学习C++。 希望这能解决内存的问题。
总之,你想做的事情肯定可以完成。 我已经设法用C#为MT4编写了一些相当复杂的DLL,包括像远程、原始套接字、http、WinForms等东西。 几乎所有你能用.NET做的事情都可以通过这种方式从MT4调用(你说的,我可能已经做了)。 而且它非常可靠。 唯一的问题是内存泄漏比较慢。bwilhite 你是个救世主! 这看起来是个不错的工具。你是否有一个c#项目来演示从c#中与MT进行通信?我想做的是让我的.net应用程序告诉MT何时交易。或者你可以推荐一个可以帮助我的链接。如果有任何帮助,我将不胜感激。
非常非常感谢!
Dll
你好。
DLL是否可以用来通过excel电子表格 发送和接收订单?
我在哪里可以了解到DLL的这个方面。
尊敬的先生
拉蒂诺
创建您自己的MetaTrader扩展(dll) - 第一部分
创建您自己的MetaTrader扩展(dll) - 第二部分
还会有另一部分(或两部分),我正在写这些内容
希望你能喜欢它们!请将您的课程更新为Visual C++ 2008 Express Edition。![](https://c.mql5.com/forextsd/smiles/embaressed_smile.png)
既然我在这里,我想我应该分享我的经验。 你想做的事当然可以做,我自己也做过很多次。
当我第一次开始写DLLs用于MT4时,我无法在C++中工作。 我认为问题在于我在Visual Studio中的项目设置总是不正确(有很多这样的项目)。 最近,我从CodeGuru那里找到了一个例子,我确实能够编译和使用它。 现在我基本上把那个项目清理掉了,把它作为一个模板。
同时,我一直在写C# DLLs,并使用这里的 这个优秀工具。 基本上,它采取了IL,并改变了它,使它可以从非托管代码中调用。 唯一的问题是,这样做时,MT4似乎出现了内存泄漏。 我还没有确定是由于MT4还是改变了IL,还是什么原因,但它发生了。
下一步,我将学习在C++上编写包装器和/或直接去学习C++。 希望这能解决内存的问题。
总之,你想做的事肯定可以完成。 我已经设法用C#为MT4编写了一些相当复杂的DLL,包括像远程、原始套接字、http、WinForms等东西。 几乎所有你能用.NET做的事情都可以通过这种方式从MT4调用(你说的,我可能已经做了)。 而且它非常可靠。 唯一的问题是内存泄漏比较慢。你能确定这个缓慢泄漏的来源吗,bwilhite? 如果你还愿意的话,我很感谢你在这方面的帮助。 目前,我正在寻找一个简单的mql dll,它可以让我通过socket发送和接收消息。 我对c#的基础知识很熟悉,所以如果我能够找到一种方法来利用,那就更好了。
谢谢。
bwilhite 你是一个生命的救星! 这看起来是个不错的工具。你是否有一个c#项目来演示从c#中与MT进行通信?我想做的是让我的.net应用程序告诉MT何时进行交易。或者你可以推荐一个可以帮助我的链接。如果有任何帮助,我将不胜感激。
你对这个马吉克有什么收获吗? 这正是我想做的事情--让.net应用程序告诉MT什么时候和什么交易。 如果你已经找到了解决方案,请让我知道。
我也很欣赏并希望从bwihite那里听到更多。 你是否有任何可以分享的c# dlls样本。
谢谢!
我一直在研究自己的DLL,遇到了127个错误。
.cpp文件包含(除其他外)。
MT4_EXPFUNC char* _stdcall DLLtest() {
return("testing!");
}
[/CODE]
header file contains:
#define MT4_EXPFUNC __declspec(dllexport)
MT4 file:
[CODE]
#import "mydll.dll"
string DLLtest();
当然这并不是所有的内容,但这是相关的信息。现在,根据我的理解,我已经有了一切,可以尝试从MT4调用该函数。
由于某些原因,它只是没有 "看到 "它的存在。我以为是我的 DLL 缺少一个 .def 文件,但即使手动创建了一个文件,仍然无法工作。另外,我相信MT4_EXPFUNC一行意味着该函数无论如何都会被导出,所以.def文件是不必要的。整个编译过程很顺利,EA运行良好,直到我试图调用该函数(因为它看不到),然后它就停止了。
我一筹莫展。我真的认为这是一个.def的问题,但我越想越觉得不是这样的。
顺便说一下,我使用的是Visual C++ 2008 Express...
谢谢你的任何见解。
-杰森
我在使用Visual C++ 2008 Express时也出现了同样的127错误。目前还没有解决方案,如果我找到了,我会把它贴出来。