我正在尝试用VB.Net为MetaTrader4创建一个动态链接库。大多数示例都是用C++编写的,但我知道也可以用VB.Net编写。我知道它比C++更棘手一些。
有谁能给我指个方向吗?关于定义MT4_EXPFUNC导出(Dll__declspec)的内容
发布于 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代码示例:
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);
}希望这能帮助那些正在尝试同样的事情的人。为了弄清楚这一点,我不得不做了相当多的阅读/研究。
发布于 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++代码。
发布于 2016-10-09 20:00:24
有一个开源项目,它让你几乎可以完全访问mtmanapi:MetaTrader4.Manager.Wrapper。
它是用C++/CLI编写的,所以在VB.NET中使用它不会有问题
https://stackoverflow.com/questions/15111206
复制相似问题