首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用VB.Net创建MetaTrader4 DLL

使用VB.Net创建MetaTrader4 DLL
EN

Stack Overflow用户
提问于 2013-02-27 19:41:27
回答 3查看 3.6K关注 0票数 0

我正在尝试用VB.Net为MetaTrader4创建一个动态链接库。大多数示例都是用C++编写的,但我知道也可以用VB.Net编写。我知道它比C++更棘手一些。

有谁能给我指个方向吗?关于定义MT4_EXPFUNC导出(Dll__declspec)的内容

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-04 10:21:27

我终于知道该怎么做了。尽管这不是理想的解决方案,但它是有效的。我在这里为“子孙后代”做记录。

基本上,我使用的是一个名为DLLExporter.Exe的程序,它将托管.Net类方法转换为直接的非托管函数。It地址:http://www.codeproject.com/Articles/37675/Simple-Method-of-DLL-Export-without-C-CLI

我的VB.Net代码示例:

代码语言:javascript
复制
Imports System.Runtime.InteropServices
Public Class myFXTrader

    <DllExporter.DllExport()>
    Public Shared Function storeFXRatesIntoSQL(
                                              <MarshalAsAttribute(UnmanagedType.LPWStr)> pvsBroker As String _
                                              , <MarshalAsAttribute(UnmanagedType.LPWStr)> pvsSymbol As String _
                                              , <MarshalAsAttribute(UnmanagedType.LPWStr)> pvsTimeStamp As String _
                                              , pviAsk As Double _
                                              , pviBid As Double) As <MarshalAsAttribute(UnmanagedType.LPWStr)> String
        Dim vsErrorCode As String = ""
        '---------------------------------
        Try
            '... do some work here ...
        Catch ex As Exception
        End Try
        '---------------------------------

        Return vsErrorCode
    End Function
End Class

编译完上述代码后,我只需运行DLLExporter myFXTrader.dll,它就会发挥它的魔力。生成的.dll文件可以复制到mt4的库文件夹中,并且可以#import并使用。请参阅下面的示例Expert Advisor代码:

代码语言:javascript
复制
#import "FXTrader.Exports.dll"
   string storeFXRatesIntoSQL(string pvsBroker, string pvsSymbol, string pviTimeStamp, double pviAsk, double pviBid);
#import

int start()
{
   Comment( storeFXRatesIntoSQL( AccountCompany(), Symbol(), TimeLocal(), Ask, Bid) );
   int err;
   err = GetLastError();
   if(err>0) { Alert( err ); }
   return(0);
}

希望这能帮助那些正在尝试同样的事情的人。为了弄清楚这一点,我不得不做了相当多的阅读/研究。

票数 3
EN

Stack Overflow用户

发布于 2013-03-01 04:34:47

你不会在metatrader中找到任何官方的例子。他们的支持总是不那么有帮助。

正如您所提到的,该应用程序接口实际上是c++,意思是本机。你想用vb.net写点东西。作为托管代码,无论你是在寻找vb还是c#,甚至是f#,你都需要一个转换层来将原生.Net和数据结构转换为manged。

查看c++/cli。Cli是一个允许您在同一程序集中混合本机代码和托管代码的框架。

__declspec(dllexport)是一条指令,它告诉链接器哪些函数要从本机dll导出,以便它们对dll的使用者可见,并可以在代码中调用。当你像那样导出一个函数时,它仍然是一个本机函数。

我不确定您是在尝试实现管理器api还是服务器api。对于管理器,整个api都在一个类中,指向该类的指针是由管理器dll导出的唯一函数提供的。在服务器的情况下,你是一个将dll作为插件编写到服务器的人,因此,从理论上讲,你可以导出插件的每个函数,但输入和输出类型仍然是本机的,在这种情况下,你将不得不编写转换器或对导出的函数使用pinvoke。下面是对pinvoke http://www.codeproject.com/Articles/4965/Using-Platform-Invoke的解释

在任何情况下,您仍然需要编写原生c++代码。

票数 1
EN

Stack Overflow用户

发布于 2016-10-09 20:00:24

有一个开源项目,它让你几乎可以完全访问mtmanapi:MetaTrader4.Manager.Wrapper

它是用C++/CLI编写的,所以在VB.NET中使用它不会有问题

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15111206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档