java - 从 Java 访问 .net DLL

标签 java .net dll jna metatrader4

我是 java 和 DLL-s 的新手

我需要从java访问DLL的方法。所以对我宽容一些。

我尝试使用 JNA 来访问 DLL,这就是我所做的。

import com.sun.jna.Library;

public class mapper {

  public interface mtApi extends Library {
        public boolean IsStopped();
  }

  public static void main(String []args){
     mtApi lib = (mtApi) Native.loadLibrary("MtApi", mtApi.class);
     boolean test = lib.IsStopped();
     System.out.println(test);

  }
}

当我运行代码时,出现以下错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError:
Error looking up function 'IsStopped':
The specified procedure could not be found.

我知道这个错误是说它找不到该函数,但我不知道如何修复它。

我正在尝试使用此 API mt4api

这是方法,我正在尝试访问 MQL4

谁能告诉我我做错了什么?

我已经研究过其他替代方案,例如jni4net,但我也无法使其工作。

如果有人可以将我链接到向我展示如何设置或知道如何设置的教程,我将不胜感激。

最佳答案

交易?
寻找毫秒来缩短时间?
宁愿进入分布式处理...绝对比依赖 API 更安全!

虽然您的OP被引导到如何弯曲java来调用.NET DLL函数, 让我草拟一个 future 更安全的解决方案

使用基于人工智能/机器学习回归的外汇交易预测器,我在同一片森林中狩猎。经过大约数百人*年的经验,在过去大约 12 年内找到的最佳解决方案是按以下方式设置的:

主机 A 执行交易:使用脚本和 EA 操作 MetaTrader 终端 4 --- distributed-processing system communicates with with a use of ZeroMQ low-latency messaging/signalling framework (大约需要几十微秒)

主机 B 对交易工具执行预测的 AI/ML 处理(大约需要几百微秒)

Cluster C 执行连续的 AI/ML 预测器重新训练和 HyperParameterSPACE 模型选择(确实需要许多 CPU 小时,连续模型自适应过程运行 24/7)

<小时/>

使用 ZeroMQ 的信令/消息传递层具有可用的端口和/或绑定(bind),并为大多数主流和许多利基编程语言(包括 java)做好准备。

仅针对已发布的 API 的隐藏危险:

虽然系统集成和测试的工作量巨大,但 API 规范始终存在规范蔓延的危险。

也就是说,在 MT4 语言规范发生无声变化后,调试会花费无数的人*月,这会破坏您之前的工具和库。为什么?想象一下。不久前,MQL4 不再是 MQL4,而是默默地转向 MQL5,名称为 New-MQL4。在编译过程中的其他变化中,棺材里有许多大大小小的钉子 - string 令人惊讶地不再是 string 而是被隐藏为内部 struct - 人们可以猜测所有 DLL 调用会导致什么。

因此,请谨防 API 爬行行为。

<小时/>

这会损害分布式处理解决方案吗?

没有。

通过明智的消息布局设计,MetaTrader Terminal 4 行为不会产生不利影响,并且所有逻辑(包括策略决策)都被置于这个缓慢的平台之外。

可行。快速且智能。如果您的预算允许,还可以使用远程 GPU 集群处理。

<小时/>

它甚至在策略测试器中也能工作吗?

是的,确实如此。

如果有人有勇气依赖内置的策略测试器,分布式处理模型仍然可以在那里工作。性能取决于首选的建模风格,整整一年的逐笔模拟,使用相当复杂的 AI/ML 组件,在常见的 COTS 桌面 PC 系统上花费了几天时间(经过多年的定量研发,我们在内部根本不使用策略测试器,但要求是批量测试 y/y 逐笔数据,因此可以在此处进行评论)。

关于java - 从 Java 访问 .net DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39375910/

相关文章:

java - Spring Cloud - Zuul服务器错误

java - Spring Security 然后部署 -> 404 错误

java - 使用 Java 将 Google 日历数据(通过 API v3)导入 Google App Engine

java - 是否需要在发布时将 Android MediaPlayer 播放器设置为 null?

mysql - MySqlCommand 上的查询语法错误

c# - GridView,DataSet 中的父子表

.net - .net(或其任何部分)是开源的吗?

c++ - DllMain 在注册 COM dll 时卡住

c# - 在多个平台上使用.NET DLL

vb.net - 是否需要在每台运行我的程序的计算机上安装 OpenXML SDK?