加载中…
  • 首页
  • 文章
  • 精选专题
  • 指标EA下载精
  • 指标EA视频
  • 指标EA商店新
  • 交易心得

{{userData.name}}

个人中心
后台
{{item.count}}
{{textHint.loading}}
  • {{data.name}}({{data.count}}){{data.name}}
当前位置:首页-文章-MT4编程方法,MT5编程方法-正文

如何在 MQL4/MQL5 调用 C# dll

4年前11013.37W

mql4/mql5 调用 dll,有以下的情况。

1. 直接调用系统 dll,如果熟悉 win32 api 直接调用系统 dll 就可以达成许多功能,这样就不需要另外再写外部的 dll。

2. 外部 dll,尽量用 C 来写,毕竟 MT4/MT5 是用 C/C++ 写,调用外部 C 写的 dll,MetaQuotes 官网也提供教程范本代码。

3. 如果真的要用 C# 来写,需要先考虑的是,C# 编译后的执行档或 dll 相当容易被 decompile,保护力远低于 ex4 ex5,原本要把特殊功能放在外部 dll 结果是更容易被破解。

但如果要达成的是一个复杂的功能,例如使用 CefSharp 这样复杂的 embed chrome 生成一个复杂的界面窗口,那靠 C# 来写一个 dll 也就只能这样作了。

下面记述如何生成一个可以被 MT4/MT5 直接调用的 C# dll,关键就是 C# 原生的 dll 是 managed codes, 需要转成 MT4/MT5 可以调用的 unmanaged export 的接口 (注: 新版的 MT5 看 release note 是可以直接调用 C# dll,但 MT4 是确定没有办法直接调用原生的 C# dll)

用 Visual Studio 建立一个 C# dll project (Class Library)

如何在 MQL4/MQL5 调用 C# dll - 第1张

输出改为 x86,因 MT4 是 x86 版,用 default 的 any cpu 会有问题

如何在 MQL4/MQL5 调用 C# dll - 第2张

在 Nuget package 选择添加下面这个 package:UnmanagedExports.Repack.Upgrade

如何在 MQL4/MQL5 调用 C# dll - 第3张

C# 的范例如下(简单的对参数作 square 和 square root)

using System;
using RGiesecke.DllExport;
using System.Runtime.InteropServices;

namespace MathDll
{
class MathDll
{
[DllExport("Square", CallingConvention = CallingConvention.StdCall)]
public static double Square(double a)
{
return a * a;
}

[DllExport("SquareRoot", CallingConvention = CallingConvention.StdCall)]
public static double SquareRoot(double a)
{
return Math.Sqrt(a);
}
}
}

把生成的 dll 放在 /mql4/libraries/ 文件夹内,在 mql4 端的调用代码如下:

#import "MathDll.dll"
double Square(double);
double SquareRoot(double);
#import
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
double a=9;
Print("Square ",a," = ",Square(a));
Print("SquareRoot ",a," = ",SquareRoot(a));
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
}

输出结果在日志如下:

如何在 MQL4/MQL5 调用 C# dll - 第4张

个人提供 MT4/MT5 EA 或 指标定制编程代写服务,有兴趣可扫描下方二维码,添加晓辉编程微信进行详细沟通。

如何在 MQL4/MQL5 调用 C# dll - 第5张

 

 

 

 

产品

  • MT4-马丁网格对冲交易系统EA ¥1,000.00
  • MT4-守望者交易系统EA ¥1,000.00
  • MT4-狙击者交易系统EA ¥1,680.00
  • MT5-裸K交易系统EA ¥1,500.00
  • MT4-裸K交易系统EA ¥1,500.00

联系我们

  • 18511093950
  • 964063050@qq.com
  • 周一至周六 09:00-22:00
  • 北京市丰台区

MT4/MT5定制模版

  • MT4/MT5 多货币网格趋势交易系统EA
  • MT4/MT5 单货币马丁对冲交易系统EA
  • MT4/MT5 BBand趋势刷单策略系统EA
  • MT4/MT5 账户监控QQ信息提示EA

MT4/MT5免费指标

  • MT4-货币强弱指标(MADdash)
  • MT4-商品隔夜利息指标
  • MT4-历史交易订单统计指标
  • MT5-交易路径指标

MT4/MT5商业EA

  • MT4/MT5-跟单交易系统EA
  • MT4-多货币持仓订单信息统计及开平仓系统EA
  • MT4-账户订单监控系统EA
  • MT4-移动挂单网格对冲财经日历系统EA

晓辉编程团队

微信扫码联系我们
Copyright © 2012-至今 晓辉编程 
13 次查询在 1.544 秒, 使用 76.76MB 内存

我的购物车