关于DLL的问题 ...... - 页 6 1234567 新评论 [删除] 2012.07.31 06:27 #51 顺便说一句,好东西http://www.parashift.com/c++-faq-lite/index.html。 [删除] 2012.08.01 08:39 #52 这个问题还与作者有关吗?我正在为自己写一个dll,我可以给你一个小例子。 Vladimir Pastushak 2012.08.01 15:32 #53 是的,它是!!!。多亏了你,我已经整理好了文件库。谢谢!但有些东西我不知道如何把它们放进dll里 ! [删除] 2012.08.01 18:17 #54 函数的调用是根据一定的规则--调用惯例。MT4保证与遵守__stdcall (规则变体的一种特殊情况)的函数一起工作。 为了确保导出的函数 使用上述规则,它应该像这样:void__stdcall AnyFn()。 2.我知道有两种方法可以使库函数导出 - 用__declspec(dllexport) 和用def文件(这更容易,否则你还得在函数解码上费劲)。在VS中,要在项目中包括def文件,首先要添加到项目文件中,然后将文件名添加到:项目属性/composer/input/module定义文件。 P.S:带有def文件的项目实例 ,位于:terminal directory/ experts/samples/DLLSample。 [删除] 2012.08.01 18:17 #55 向dll函数传递参数 1.当传递字符串变量时,一个char数组(ANSI字符,需要1个字节)被传递给DLL。 #import "myLib.dll" void fn(string var); #import DLL: void __stdcall fn(char *pointer) {} 2.向库传递int或double将导致变量被复制,因此当你改变dll中的变量时,dll中没有变化。 #import "myLib.dll" void fn(int var); void fn(double var); #import DLL: void __stdcall fn(int var) {} 3.为了能够改变在MQL中声明的int和double变量,应该传递数组。 #import "myLib.dll" void fn(int var[]); void fn(double var[]); #import DLL: void __stdcall fn(int *var) {} void __stdcall fn(double *var) {} 4.当从字符串传递一个数组时,MqlStr结构被传递给DLL。 МКЛ прототип: #import "myLib.dll" void fn(string var[]); #import DLL: struct MqlStr { int len; char *string; }; void __stdcall fn(MqlStr *var) {} P.S. 每当一个数组或一个字符串(string)被传递给DLL时,它实际上是一个指向内存部分的指针(pointer),该指针被传递给库,如下所示 void __stdcall fn(int *pointer) {} // 像这样。这样你就可以作为一个数组工作,例如,pointer[4] = 4。 void __stdcall fn(int &reference) {} // 或如此。但我们将只获得一个元素的访问权。 当把一个元素的数组传入库中时,它是相关的。 Vladimir Pastushak 2012.08.03 05:57 #56 #import "myLib.dll" void fn(string var); #import DLL: void __stdcall fn(char *pointer) {} 我找不到关于指针 前面的*的正确解释,它的作用是什么?难道不可以不这样做吗?????? 还有一个问题,如何从dll中获取文本? Vladimir Gomonov 2012.08.03 06:10 #57 VOLDEMAR: 我找不到关于指针前面的*的正确解释,它的作用是什么? 难道不可以不这样做吗?????? 还有一个问题,如何从dll中获取文本? 你不需要从它那里得到文本。 至少今年没有。 [删除] 2012.08.03 06:53 #58 1.将一个字符串传输到IDC。 DLL: #include <string.h> void __stdcall Temp(char *mqlStr) { size_t mqlStringSize = strlen(mqlStr); char stroka[] = "DLL string"; // Эту строку передадим в MQL. if(strlen(stroka) > mqlStringSize) stroka[mqlStringSize] = '\0'; // Добавляем нуль-терминатор (обозначает конец строки). strcpy(mqlStr, stroka); return; } MQL: #include "WaveCounter.dll" void Temp(string str); #include int start() { string str = "wwwwwsff"; // Задаем длину строки; Если длина будет меньше необходимого, то строка будет урезана. Temp(str); Alert(str); return; } 2.符号*表示它是一个指针。简而言之,任何变量不仅有一些值,而且还有它在内存中的地址。指针可以与这个地址一起工作。这是一个需要很好理解的问题,我想你应该去看看C++的书。 Vladimir Pastushak 2012.08.03 08:01 #59 220Volt: 1.将一个字符串传输到IDC。 2.符号*表示它是一个指针。简而言之,任何变量不仅有一些值,而且还有它在内存中的地址。指针可以与这个地址一起工作。这是一个需要很好理解的问题,所以你可能想去看看一些C++的书。 这就是我正在做的事情。我在使用C++,看视频,看书。现在,MKL 5的大部分内容都变得清晰了 ....... [删除] 2012.08.03 09:32 #60 你只需要小心处理库中的全局数据。MCL程序彼此独立运行(但共享全局变量,因为它们在同一个线程中),因此有可能几个脚本会写入和读到同一个内存位置(这不是好事)。这需要同步化,例如通过使用关键部分。我强调,这对全局数据(在函数之外声明的)是真实的。当函数被调用时,它们自己的、独立的变量集被创建。 1234567 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
函数的调用是根据一定的规则--调用惯例。MT4保证与遵守__stdcall (规则变体的一种特殊情况)的函数一起工作。 为了确保导出的函数 使用上述规则,它应该像这样:void__stdcall AnyFn()。
2.我知道有两种方法可以使库函数导出 - 用__declspec(dllexport) 和用def文件(这更容易,否则你还得在函数解码上费劲)。在VS中,要在项目中包括def文件,首先要添加到项目文件中,然后将文件名添加到:项目属性/composer/input/module定义文件。
P.S:带有def文件的项目实例 ,位于:terminal directory/ experts/samples/DLLSample。
向dll函数传递参数
1.当传递字符串变量时,一个char数组(ANSI字符,需要1个字节)被传递给DLL。
2.向库传递int或double将导致变量被复制,因此当你改变dll中的变量时,dll中没有变化。
3.为了能够改变在MQL中声明的int和double变量,应该传递数组。
4.当从字符串传递一个数组时,MqlStr结构被传递给DLL。
P.S.
每当一个数组或一个字符串(string)被传递给DLL时,它实际上是一个指向内存部分的指针(pointer),该指针被传递给库,如下所示
void __stdcall fn(int *pointer) {} // 像这样。这样你就可以作为一个数组工作,例如,pointer[4] = 4。
void __stdcall fn(int &reference) {} // 或如此。但我们将只获得一个元素的访问权。 当把一个元素的数组传入库中时,它是相关的。
我找不到关于指针 前面的*的正确解释,它的作用是什么?难道不可以不这样做吗??????
还有一个问题,如何从dll中获取文本?
我找不到关于指针前面的*的正确解释,它的作用是什么? 难道不可以不这样做吗??????
还有一个问题,如何从dll中获取文本?
1.将一个字符串传输到IDC。
2.符号*表示它是一个指针。简而言之,任何变量不仅有一些值,而且还有它在内存中的地址。指针可以与这个地址一起工作。这是一个需要很好理解的问题,我想你应该去看看C++的书。1.将一个字符串传输到IDC。
2.符号*表示它是一个指针。简而言之,任何变量不仅有一些值,而且还有它在内存中的地址。指针可以与这个地址一起工作。这是一个需要很好理解的问题,所以你可能想去看看一些C++的书。你只需要小心处理库中的全局数据。MCL程序彼此独立运行(但共享全局变量,因为它们在同一个线程中),因此有可能几个脚本会写入和读到同一个内存位置(这不是好事)。这需要同步化,例如通过使用关键部分。我强调,这对全局数据(在函数之外声明的)是真实的。当函数被调用时,它们自己的、独立的变量集被创建。