我是 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/