【问题标题】:How to return a struct from an imported DLL-function in MQL4?如何从 MQL4 中导入的 DLL 函数返回结构?
【发布时间】:2016-10-19 00:07:31
【问题描述】:

有没有办法从 MQL4 中的导入函数返回结构,而不必将其作为参数传递并制作 memcpy?

【问题讨论】:

    标签: mql4 metatrader4


    【解决方案1】:

    小心使用任何类型的 DLL 接口,MQL4 文档指出:

    传递参数
    所有简单类型的参数都通过值传递,除非明确指出它们是通过引用传递的。传递字符串时,传递的是复制字符串的缓冲区地址;如果一个字符串是通过引用传递的,这个字符串的缓冲区地址会被传递给从 DLL 导入的函数。

    结构包含动态数组[ ]字符串、其他复杂结构,以及静态 枚举对象的动态数组[],不能作为参数传递给导入的函数

    将数组传递给 DLL 时,始终传递数据缓冲区的开头地址(与 AS_SERIES 标志无关)。 DLL 中的函数对AS_SERIES 标志一无所知,传递的数组是未定义长度的静态数组;应使用附加参数来指定数组大小。

    更多故障适用...那么如何使它工作?

    也许一个直接的、异构的多方分布式处理,而不是函数调用,而不是函数调用,独立于维护 DLL 导入函数 API 更改的所有噩梦,是一种更安全的方式。在过去的几年中使用这种方法,此后 -MQL4.56789 string-s 没有问题,它抓住了 string-s 并保持沉默开始变成struct-s等

    值得了解。

    Anyway, welcome and enjoy the Wild Worlds of MQL4 -- may enjoy to click and read other posts on issues in MQL4/DLL integration and/or signalling/messaging in MQL4 domains. Feel free to ask more

    【讨论】:

    • 是的,他们在谈论传递参数,但没有关于将结构作为返回值...我知道在导入 dll 时要谨慎(我实际上正在使用 wine 并且我执行dll 代码原生感谢 WineLib 使用 unix 套接字作为通信点...)我猜关于返回 struct 没有这样的功能并且必须复制请求...幸运的是,开销不应该那么大.. .
    • 不依赖 MQL4 端代码语法约束并使用智能 ZeroMQ 多部分消息(可用于几乎所有最近使用的语言 + 主流遗产的包装器)并享受解码和解析任何其他类型的最小努力怎么样类似结构的表示掩蔽?
    • 据我了解,Zmq 是一个可移植的消息传递库,这确实很有趣,但是在查看了代码之后,它除了确保消息的原子性等方面没有做更多的事情. 所以在我的情况下,它是“简单的部分”已经起作用了;)
    猜你喜欢
    • 2012-12-03
    • 2018-09-25
    • 2020-03-03
    • 1970-01-01
    • 1970-01-01
    • 2013-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多