关于 long 的问题 - 如果使用 int 作为从字符数组中接收类似内容的 4 字节接收器,则可以,但完全没有必要。(也就是说,你使用 & 指针传递)。
如何查找 - 在此您可以 http://forum.ixbt.com/topic.cgi?id=26:37968
关于 long 的问题 - 如果使用 int 作为从字符数组中接收类似内容的 4 字节接收器,则可以,但完全没有必要。(也就是说,你使用 & 指针传递)。
如何查找 - 这里可以 http://forum.ixbt.com/topic.cgi?id=26:37968。
下午好。尽管这篇文章是很久以前写的,但使用库 dlls 进行数据交换的问题仍然具有现实意义。我自己最近也需要实现某种功能,当时我有一个选择:编写自己的 dll 还是尝试使用库 dll。我选择了后者,自然也面临着传输结构和取回数据的困难。读完这篇文章后,我并没有完全理解其中的一些要点,在我看来,这些要点非常复杂。在这篇文章中,当将结构体传输到外部环境时,建议使用数组作为分配的内存区域,库函数会将结果存入该区域,我们需要转换该区域以便进一步工作。我在这方面的经验很少,也许我的推理会显得很外行,但我还是要表达一下自己的观点,希望聪明人能指正我。让我们来看一篇旧文章 https://www.mql5.com/zh/articles/1543 中提到的一个简单例子。
这篇文章涉及通过库 dlls 搜索文件的问题。它还建议传递一个指向所需大小数组的指针,然后从数组中提取所需数据。
什么是结构体?就是同一个内存区域。现在,让我们尝试改变传递结构和提取数据的方法:
// 声明数据类型定义 #define DWORD int #define TCHAR short // 设置该类型,因为我们将使用 unicode #define MAX_PATH (260) // 声明 FILETIME 结构 struct FILETIME { DWORD dwLowDateTime; DWORD dwHighDateTime; }; // 声明搜索结果的数据结构 struct _WIN32_FIND_DATA { DWORD dwFileAttributes; FILETIME ftCreationTime; FILETIME ftLastAccessTime; FILETIME ftLastWriteTime; DWORD nFileSizeHigh; DWORD nFileSizeLow; DWORD dwReserved0; DWORD dwReserved1; TCHAR cFileName[MAX_PATH]; TCHAR cAlternateFileName[14]; }; // 通过声明数据类型,我们可以复制 WinAPI 结构,而无需做任何更改 // 导入库函数 #import "kernel32.dll" int FindFirstFileW(string path, _WIN32_FIND_DATA& answer); #import //+------------------------------------------------------------------+ //| 专家初始化函数| //+------------------------------------------------------------------+ int OnInit() { // 用之前创建的结构类型创建一个变量 _WIN32_FIND_DATA data; // 调用库函数,传递指向我们的结构的指针,实际上也是指向分配的内存的指针 int handle = FindFirstFileW(TerminalInfoString(TERMINAL_DATA_PATH) + "\\MQL5\\Experts\\*.mq5", data); if(handle!=-1) { // 通过访问我们结构中的字段查看搜索结果,无需额外转换 Print("找到文件名:", ShortArrayToString(data.cFileName)); Print("临时找到的文件名:", ShortArrayToString(data.cAlternateFileName)); Print("找到的文件大小:", data.nFileSizeLow); } //--- return(INIT_SUCCEEDED); } //+-

- 2008.07.15
- MetaQuotes Software Corp.
- www.mql5.com
结构体本质上是什么?就是相同的内存部分。现在,让我们尝试改变传递结构和提取数据的方法:
我通过编辑器正确粘贴了您的代码
通过编辑器正确粘贴了您的代码
非常感谢!我还不知道如何在这里正确地格式化代码。(((
新文章 摆脱自制的 DLL已发布:
如果 MQL5 语言的功能性不足以完成任务,MQL5 程序员不得不诉诸于其他工具。他们必须转向其他编程语言并创建中间 DLL。MQL5 可提供各种数据类型并将它们传递至 API,但遗憾的是,MQL5 无法解决从收到的指针提取数据的相关问题。在本文中,我们将循规蹈矩,说明交换和使用复杂数据类型的简单机制。
作者:o_O