DLL字符串功能在Build 600上不起作用 - 页 2 123 新评论 Sergey Lukin 2014.02.10 16:54 #11 gchrmt4: 模拟旧的Ansi字符串数组是混乱的,但仍然是可能的。(这将取决于DLL是否表现良好,特别是如果它通过改变数组的内容将数据传回 给MQL4。我只针对底部的C++示例代码进行了测试,而不是针对更现实的东西,如MySql库)。 例如,上面的代码与下面的DLL一起工作,它为数组中的每个字符串做一个消息框,然后在返回到MT4之前将字符串反转。 我只是无法解释你的片段有多大的帮助。非常感谢您!我已经在纯MQL4(UNICODE版本)中写 了一个MySQL包装器,使用你提到的技术和我在EAX MySQL库(MQL5)中发现的技术与libmysql.dll(ANSI)进行通信。 如果你能看一下我的代码,并让我知道 需要改进的地方或对它的贡献,我真的很感激,因为我确信它可以改进。 Rick 2014.02.13 04:18 #12 gchrmt4, 你能告诉我如何通过DLL函数调用 传递一个字符串吗,或者给我指出一些示例代码? 我想确认的是,我可以做这样的一个调用。 #import int call_a_string_function(string this_is_a_string)。 #import ... ... string foo1 = "this is a string"; int retruncode = call_a_string_function(foo1); 那么上述函数的C语言代码会是什么样子的?我只是在寻找常规的例子。 比如说 int call_a_string_function(char *this_is_a_string); 等等 有些人说要用数组或char数组等等。我希望得到一些澄清。只是一个简单的例子,因为你提到了内存泄漏等,所以最好的方法是什么? 问候 gorick DLL string function does Create your own MetaTrader Parameter delcarations for imported Alain Verleyen 2014.02.13 20:10 #13 gorick: gchrmt4, 你能告诉我如何通过DLL函数调用传递一个字符串吗,或者给我指出一些示例代码? 我想确认的是,我可以做这样的一个调用。 #import int call_a_string_function(string this_is_a_string)。 #import ... ... string foo1 = "this is a string"; int retruncode = call_a_string_function(foo1); 那么上述函数的C语言代码会是什么样子的?我只是在寻找常规的例子。 比如说 int call_a_string_function(char *this_is_a_string); 等等 有些人说要用数组或char数组等等。我希望得到一些澄清。只是一个简单的例子,因为你提到了内存泄漏等,所以最好的方法是什么? 问候 gorick 见本文https://www.mql5.com/en/articles/18 Rick 2014.02.14 01:17 #14 是的,对此表示感谢。介绍得真好,也是我所期望的。然而,我似乎在字符串方面遇到了问题。我从该文件中用C语言创建了一个样本,例如下面,接受一个字符串值作为输入,并将其写入一个文件。#define WIN32_LEAN_AND_MEAN #include <windows.h> #define EXPORT extern "C" __declspec (dllexport) //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ EXPORT void __stdcall GetStringValue(wchar_t *spar) { char abc[20]; strcpy(abc,"foooooooooooo1"); printf("GetStringValue \"%s\"\n",spar); FILE *fp; fp=fopen("fooerr.txt", "w"); fprintf(fp, "These are the string values: %s %s\n\n", spar, abc); fclose(fp); } 我把数值写到一个文件里来检查。 MQL如下。 #property indicator_chart_window #include <stderror.mqh> #include <stdlib.mqh> #import "myDLL.dll" void GetStringValue(string instring); #import int init() { string instring = "Rick wrote this"; GetStringValue(instring); return(0); } // init 文件的输出如下。 这些是字符串的值。R foooooooooo1它只返回 "R "或传递的字符串的第一个字符?插入 "foooooooooo1 "只是为了检查我的打印是否正确。有没有人知道我做错了什么? Simon Gniadkowski 2014.02.14 09:01 #15 gorick: 是的,对此表示感谢。介绍得真好,也是我所期望的。然而,我似乎在字符串方面遇到了问题。 我从该文件中用C语言创建了一个样本,例如下面,接受一个字符串值作为输入,并将其写入一个文件。 <移除>。 请使用 SRC按钮 来发布代码。. . gchrmt4 2014.02.14 09:11 #16 gorick: 有没有人知道我做错了什么? 问题出在你的C语言代码中,而不是在MQL4中。 printf()中的%s指的是 "Ansi字符串"。你需要使用%ls Alain Verleyen 2014.02.14 09:27 #17 gorick: 是的,对此表示感谢。介绍得真好,也是我所期望的。然而,我似乎在字符串方面遇到了问题。 我从该文件中用C语言创建了一个样本,例如下面,接受一个字符串值作为输入,并将其写入一个文件。 我把数值写到一个文件中进行检查。MQL如下。 文件的输出如下。这些是字符串的值。R foooooooooo1 它只返回 "R "或传递的字符串的第一个字符?插入 "foooooooooo1 "只是为了检查我的打印是否正确。 有没有人知道我做错了什么? 你好。 当你发布代码时,请使用SRC按钮。谢谢你。 这一次,我为你编辑了它。 Rick 2014.02.14 09:57 #18 angevoyageur: 你好。 当你发布代码时,请使用SRC按钮。谢谢你。 这一次,我为你编辑了它。 对不起各位,我真的是第一次在这里发帖。 谢谢你的意见,我真的很感激。 这意味着所有现有的样本都是不准确的。人们必须使用unicode。由于我对DLL的编程非常陌生,最近才从头开始,所以我在很大程度上依赖于所给的样本。 另外,我碰巧在同一时间开始使用600构建。 如果你已经做了很长时间,我想你是完全了解这种情况的。不幸的是,我没有,只是在这个论坛上得到一些信息和建议的片段。 我为我的无知感到抱歉。 问候和感谢 Rick 2014.02.15 23:56 #19 人们。 因为你们都帮助过我,所以我很乐意分享我的代码,它与Oracle数据库进行了连接。 问题是,Oracle Pro*C预编译器和oracle可以处理unicode,但是在构造的使用上有一些限制。要登录,字符串必须是ascii。下面是通过DLL调用登录到数据库的代码。 如果有人对如何做得更好有任何建议,请让我知道。 我再次感谢你们。 EXPORT int __stdcall oracle_connect(char *connect1[], char *connect2[], char *connect3[]) { EXEC SQL BEGIN DECLARE SECTION; VARCHAR username[UNAME_LEN]; /* VARCHAR is an Oracle-supplied struct */ varchar password[PWD_LEN]; /* varchar can be in lower case also. */ varchar dbstring[DBSTRING_LEN]; EXEC SQL END DECLARE SECTION; /* Connect to ORACLE-- * Copy the username into the VARCHAR. * Set the length component of the VARCHAR. strncpy((char *) username.arr, connect1, UNAME_LEN); username.len = strlen((char *) username.arr); strncpy((char *) password.arr, connect2, PWD_LEN); password.len = strlen((char *) password.arr); strncpy((char *) dbstring.arr, connect3, DBSTRING_LEN); dbstring.len = strlen((char *) dbstring.arr); EXEC SQL WHENEVER SQLERROR DO return(sqlca.sqlcode); EXEC SQL CONNECT :username IDENTIFIED BY :password USING :dbstring; /* printf("\n\nConnected to ORACLE as user: %s\n", username.arr); */ return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ MQL4 code #import "oraDLL.dll" int oracle_connect(uchar user_name[], uchar user_pwd[], uchar db_service[]); #import extern string DBusername = "scott"; extern string DBpassword = "tiger"; extern string DBservice = "localhost/pdborcl"; int returncode; int init() { uchar user_name[], user_pwd[], db_service[]; StringToCharArray(DBusername,user_name); StringToCharArray(DBpassword,user_pwd); StringToCharArray(DBservice,db_service); returncode = oracle_connect(user_name,user_pwd,db_service); Print("returncode = " + returncode); } Zsolt Haromszeki 2014.02.16 11:13 #20 gorick: 人们。 因为你们都帮助过我,所以我很乐意分享我的代码,它与Oracle数据库进行了连接。 问题是,Oracle Pro*C预编译器和oracle可以处理unicode,但是在构造的使用上有一些限制。要登录,字符串必须是ascii。下面是通过DLL调用登录到数据库的代码。 如果有人对如何做得更好有任何建议,请让我知道。 我再次感谢你们。 非常感谢gorkk! 123 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
模拟旧的Ansi字符串数组是混乱的,但仍然是可能的。(这将取决于DLL是否表现良好,特别是如果它通过改变数组的内容将数据传回 给MQL4。我只针对底部的C++示例代码进行了测试,而不是针对更现实的东西,如MySql库)。
例如,上面的代码与下面的DLL一起工作,它为数组中的每个字符串做一个消息框,然后在返回到MT4之前将字符串反转。
我只是无法解释你的片段有多大的帮助。非常感谢您!我已经在纯MQL4(UNICODE版本)中写 了一个MySQL包装器,使用你提到的技术和我在EAX MySQL库(MQL5)中发现的技术与libmysql.dll(ANSI)进行通信。
如果你能看一下我的代码,并让我知道 需要改进的地方或对它的贡献,我真的很感激,因为我确信它可以改进。
gchrmt4,
你能告诉我如何通过DLL函数调用 传递一个字符串吗,或者给我指出一些示例代码?
我想确认的是,我可以做这样的一个调用。
#import
int call_a_string_function(string this_is_a_string)。
#import
...
...
string foo1 = "this is a string";
int retruncode = call_a_string_function(foo1);
那么上述函数的C语言代码会是什么样子的?我只是在寻找常规的例子。
比如说
int call_a_string_function(char *this_is_a_string);
等等
有些人说要用数组或char数组等等。我希望得到一些澄清。只是一个简单的例子,因为你提到了内存泄漏等,所以最好的方法是什么?
问候
gorick
gchrmt4,
你能告诉我如何通过DLL函数调用传递一个字符串吗,或者给我指出一些示例代码?
我想确认的是,我可以做这样的一个调用。
#import
int call_a_string_function(string this_is_a_string)。
#import
...
...
string foo1 = "this is a string";
int retruncode = call_a_string_function(foo1);
那么上述函数的C语言代码会是什么样子的?我只是在寻找常规的例子。
比如说
int call_a_string_function(char *this_is_a_string);
等等
有些人说要用数组或char数组等等。我希望得到一些澄清。只是一个简单的例子,因为你提到了内存泄漏等,所以最好的方法是什么?
问候
gorick
是的,对此表示感谢。介绍得真好,也是我所期望的。然而,我似乎在字符串方面遇到了问题。
我从该文件中用C语言创建了一个样本,例如下面,接受一个字符串值作为输入,并将其写入一个文件。
我把数值写到一个文件里来检查。MQL如下。
文件的输出如下。这些是字符串的值。R foooooooooo1
它只返回 "R "或传递的字符串的第一个字符?插入 "foooooooooo1 "只是为了检查我的打印是否正确。
有没有人知道我做错了什么?
是的,对此表示感谢。介绍得真好,也是我所期望的。然而,我似乎在字符串方面遇到了问题。
我从该文件中用C语言创建了一个样本,例如下面,接受一个字符串值作为输入,并将其写入一个文件。
<移除>。
有没有人知道我做错了什么?
问题出在你的C语言代码中,而不是在MQL4中。
printf()中的%s指的是 "Ansi字符串"。你需要使用%ls
是的,对此表示感谢。介绍得真好,也是我所期望的。然而,我似乎在字符串方面遇到了问题。
我从该文件中用C语言创建了一个样本,例如下面,接受一个字符串值作为输入,并将其写入一个文件。
我把数值写到一个文件中进行检查。MQL如下。
文件的输出如下。这些是字符串的值。R foooooooooo1
它只返回 "R "或传递的字符串的第一个字符?插入 "foooooooooo1 "只是为了检查我的打印是否正确。
有没有人知道我做错了什么?
你好。
当你发布代码时,请使用SRC按钮。谢谢你。
这一次,我为你编辑了它。
你好。
当你发布代码时,请使用SRC按钮。谢谢你。
这一次,我为你编辑了它。
对不起各位,我真的是第一次在这里发帖。
谢谢你的意见,我真的很感激。
这意味着所有现有的样本都是不准确的。人们必须使用unicode。由于我对DLL的编程非常陌生,最近才从头开始,所以我在很大程度上依赖于所给的样本。 另外,我碰巧在同一时间开始使用600构建。
如果你已经做了很长时间,我想你是完全了解这种情况的。不幸的是,我没有,只是在这个论坛上得到一些信息和建议的片段。
我为我的无知感到抱歉。
问候和感谢
如果有人对如何做得更好有任何建议,请让我知道。
我再次感谢你们。
如果有人对如何做得更好有任何建议,请让我知道。
我再次感谢你们。