使用VB.Net创建MetaTrader4 DLL

时间:2013-02-27 11:41:27

标签: vb.net dll metatrader4

我试图用VB.Net为MetaTrader4创建一个DLL。大多数示例都是用C ++编写的,但我知道它可以在VB.Net中完成。我知道它比C ++更棘手。

有人能指出我正确的方向吗? 关于定义MT4_EXPFUNC __declspec(dllexport)

的事情

3 个答案:

答案 0 :(得分:3)

我终于弄清楚该怎么做了。虽然这不是理想的解决方案,但它确实有效。我在这里记录“未来世代”。

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

我的VB.Net代码示例:

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代码:

#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);
}

希望这能帮助那些尝试同样事情的人。我不得不做很多阅读/研究来解决这个问题。

答案 1 :(得分:1)

你不会从metatrader找到任何官方的例子。他们的支持总是不那么有用。

你提到的api确实是c ++,意思是原生的。您正在寻找在vb.net中写一些东西。 .Net是托管代码,无论你是在寻找vb还是c#甚至f#,你都需要一个能够将原生api和数据结构转换为manged的转换层。

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

__ declspec(dllexport)是一条指令,它告诉链接器从本机dll导出哪些函数,以便它们对dll的使用者可见,并且可以在代码中调用。当您导出类似的函数时,它仍然是本机函数。

我不确定您是否尝试实施经理或服务器API。在管理器的情况下,整个api在一个类中,指针由管理器dll导出的唯一函数提供。在服务器的情况下,你是将dll作为插件写入服务器的那个,理论上,你可以导出插件的每个功能,但输入和输出类型仍然是原生的,在这种情况下,你将有以太在您导出的函数上编写转换器或使用pinvoke。以下是pinvoke http://www.codeproject.com/Articles/4965/Using-Platform-Invoke

的解释

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

答案 2 :(得分:0)

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

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