我试图用VB.Net为MetaTrader4创建一个DLL。大多数示例都是用C ++编写的,但我知道它可以在VB.Net中完成。我知道它比C ++更棘手。
有人能指出我正确的方向吗? 关于定义MT4_EXPFUNC __declspec(dllexport)
的事情答案 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中使用它不会有问题