DLL字符串功能在Build 600上不起作用 - 页 3 123 新评论 Ji Yang Lou 2014.02.19 13:21 #21 #import "MT4iQuickChannel.dll" int QC_StartSender(string); int QC_ReleaseSender(int); int QC_SendMessage(int SenderHandle, string Message, int Flags); #import #import "kernel32.dll" void OutputDebugStringW(string msg); #import extern string ChannelName = "QuickChannelTest"; extern bool LogMessagesToDbgView = true; int glbHandle = 0; void init() { glbHandle = QC_StartSender(ChannelName); if (glbHandle == 0) { Alert("Failed to get a QuickChannel sender handle"); } } void deinit() { QC_ReleaseSender(glbHandle); glbHandle = 0; } void start() { if (glbHandle != 0) { string strMsg = StringConcatenate("我的天哪" ,TimeToStr(TimeLocal(), TIME_SECONDS), ": " , Symbol() , "," , DoubleToStr(Bid, MarketInfo(Symbol(), MODE_DIGITS)) , "," , DoubleToStr(Ask, MarketInfo(Symbol(), MODE_DIGITS))); if (LogMessagesToDbgView) OutputDebugStringW("Message " + strMsg); int result = QC_SendMessage(glbHandle, strMsg, 0); if (result == 0) Alert("QuickChannel message failed"); printf(strMsg); } } #import "MT4iQuickChannel.dll" int QC_StartReceiver(string, int); int QC_ReleaseReceiver(int); int QC_GetMessages3(int, string & arr[], int); #import #import "kernel32.dll" void OutputDebugStringW(string msg); #import extern string ChannelName = "QuickChannelTest"; extern bool LogMessagesToDbgView = true; int glbHandle = 0; string glbReceiveBuffer = ""; void init() { glbReceiveBuffer = "12345678"; for (int i = 0; i < 4; i++) glbReceiveBuffer = StringConcatenate(glbReceiveBuffer, glbReceiveBuffer); } void deinit() { QC_ReleaseReceiver(glbHandle); glbHandle = 0; } void start() { if (glbHandle == 0) { glbHandle = QC_StartReceiver(ChannelName, WindowHandle(Symbol(), Period())); if (glbHandle == 0) { Alert("Failed to get a QuickChannel receiver handle"); } } if (glbHandle != 0) { string arrBuffer[1]; arrBuffer[0] = StringConcatenate(glbReceiveBuffer, ""); // Use copy of buffer template int res = QC_GetMessages3(glbHandle, arrBuffer, StringLen(arrBuffer[0])); if (res == 2) { Alert("QuickChannel buffer is not large enough!"); } else if (res == 1) { } else { string strMsgList = arrBuffer[0]; if (strMsgList != "") { string Messages[]; StringSplit(strMsgList, "\t", Messages); for (int i = 0; i < ArraySize(Messages); i++) { string strMsg = Messages[i]; if (LogMessagesToDbgView) OutputDebugStringW("..." + strMsg); Comment(strMsg); Print(strMsg); } } } }} void StringSplit(string InputString, string Separator, string & ResultArray[]) { ArrayResize(ResultArray, 0); int lenSeparator = StringLen(Separator), NewArraySize; while (InputString != "") { int p = StringFind(InputString, Separator); if (p == -1) { NewArraySize = ArraySize(ResultArray) + 1; ArrayResize(ResultArray, NewArraySize); ResultArray[NewArraySize - 1] = InputString; InputString = ""; } else { NewArraySize = ArraySize(ResultArray) + 1; ArrayResize(ResultArray, NewArraySize); ResultArray[NewArraySize - 1] = StringSubstr(InputString, 0, p); InputString = StringSubstr(InputString, p + lenSeparator); if (InputString == "") { ArrayResize(ResultArray, NewArraySize + 1); ResultArray[NewArraySize] = ""; } } }} 嗨,编码员,这是MT4iQuickChannel.dll发送-接收信息的例子,它在MT4 v509中工作,但在v600+中不工作,我知道问题是关于16位unicode,但我不能解决它,所以每个人都能帮助我吗? Ji Yang Lou 2014.02.19 13:34 #22 这是代码,安装在两个MT上,用于与两个终端 通信。 附加的文件: quickchannel_example.zip 56 kb Zsolt Haromszeki 2014.02.19 22:29 #23 appleparty: 这是代码,安装到两个MT中,用于与两个终端进行通信。 非常感谢appleparty! Ji Yang Lou 2014.02.20 05:10 #24 不客气,这段代码在v600+中不工作,所以如果你能告诉我们如何解决这个问题,我想非常感谢你!。 [Deleted] 2014.02.20 18:43 #25 @gorick: 连接到ORACLE数据库的工作很好!但是你是如何用mql4从ORACLE读/写的? 你从哪里得到oraDLL.dll的? 先谢谢你! 俞敏洪 Dernie 2014.02.21 11:33 #26 我有和m.mick一样的问题。 我在哪里可以下载oraDLL.dll,用ORACLE-DB读写的实现方式是怎样的? 谢谢你对我的帮助! Rick 2014.02.25 02:54 #27 m.mick: @gorick: 连接到ORACLE数据库的工作很好!但是你是如何用mql4从ORACLE读/写的? 你从哪里得到oraDLL.dll的? 预祝你成功! Michael m.mick, 我所给出的是一个使用Oracle Pro*C预编译器的代码片段。与EXEC SQL CONNECT相同。请看下面的例子。你写好代码,然后通过Oracle Pro*C预编译器运行,产生C代码,然后将其编译为DLL中的函数调用 的一部分。你需要了解甲骨文,获得甲骨文数据库和客户端软件,包括预编译器来做这件事。我已经使用oracle很长时间了,比起其他所有的软件,我更喜欢它,只是因为我已经习惯了它。 祝您好运。 EXEC SQL WHENEVER NOT FOUND DO sql_error("ORACLE error--\n"); EXEC SQL SELECT 'Col1', 'Col2' INTO :stringrec INDICATOR :string_ind /* note insert into array variable */ FROM dual WHERE :bindval1 = :bindval1 AND :string1 = :string1; Oracle Pro*C预编译器从 上述内容中 生成C代码,使用 OCI--Oracle调用接口,即它的本地API与Oracle对接。 Rick 2014.02.27 11:10 #28 gorick: m.mick, 我所给出的是一个使用Oracle Pro*C预编译器的代码片段。与EXEC SQL CONNECT相同。请看下面的例子。你写好代码,然后通过Oracle Pro*C预编译器运行,生成C代码,然后将其编译为DLL中的函数调用的一部分。你需要了解甲骨文,获得甲骨文数据库和客户端软件,包括预编译器来做这件事。我已经使用oracle很长时间了,比起其他所有的软件,我更喜欢它,只是因为我已经习惯了它。 祝您好运。 Oracle Pro*C预编译器从 上述内容中 生成C代码,使用 OCI--Oracle调用接口,即它的本地API来连接 Oracle。 我忘了说,你将需要32位的Oracle即时客户端,在这里可以找到:http://www.oracle.com/technetwork/topics/winsoft-085727.html,64位的将不能在MetaTrader平台上使用。DB可以是64位的版本。你必须了解Oracle,它是一个复杂的软件。你可以免费开发,你只需要在Oracle创建一个注册,注册是免费的。所有的Oracle下载都是免费的。 Dernie 2014.03.12 13:24 #29 戈里克。 是的,你是对的,ORACLE是一个复杂的软件。我从几年前就开始使用ORACLE了(但只是SQL和PL/SQL),它是最好的数据库。不幸的是,我没有使用Pro*C编译器或DLL的开发。所以对我来说,要做到这一点是相当困难的。但我要试试!:-) 我有几个关于你的伟大工作的问题。 #import "oraDLL.ex4" int oracle_connect(uchar user_name[], uchar user_pwd[], uchar db_service[]); #import 如果我试图编译(Build 610)它,我将收到诸如 "数组仅通过引用传递 "的错误信息。为什么?我应该怎么做?为什么你用ucar[]而不是字符串?也许是因为Pro*C-Compiler的关系? 你是如何开发DLL的?也是用MT4吗?在meta editor.... 中编译后,我收到了一个*.ex4-文件. 如果我从Pro*C预编译器中收到.c文件,我应该如何处理该文件?我如何用这段代码开发或生成一个DLL? Oracle Instant Client 是每个使用 oraDLL 的客户必须使用的。对吗? 预先感谢!!!。 Dernie 2014.03.14 12:48 #30 如果我使用ORACLE Pro*C编译器,在将生成的代码插入dll后会出现很多错误。 下面是编译dll后的一些问题。 - UNAME_LEN、PWD_LEN和DBSTRING_LEN的声明丢失了 -EXPORT 这个词对吗,我会得到一个错误;extern这个词不对吗? - connect1(还有2和3)是不同的类型:在声明中是char **,在使用中(strncpy)是char *;而且它是被贬低的,你应该使用strncpy_s - sqlca没有被声明 - ... 谁能帮帮我? 谢谢。 尊敬的各位领导 123 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
这是代码,安装到两个MT中,用于与两个终端进行通信。
非常感谢appleparty!
不客气,这段代码在v600+中不工作,所以如果你能告诉我们如何解决这个问题,我想非常感谢你!。
@gorick:
连接到ORACLE数据库的工作很好!但是你是如何用mql4从ORACLE读/写的?
你从哪里得到oraDLL.dll的?
先谢谢你!
俞敏洪
我有和m.mick一样的问题。
我在哪里可以下载oraDLL.dll,用ORACLE-DB读写的实现方式是怎样的?
谢谢你对我的帮助!
@gorick:
连接到ORACLE数据库的工作很好!但是你是如何用mql4从ORACLE读/写的?
你从哪里得到oraDLL.dll的?
预祝你成功!
Michael
m.mick,
我所给出的是一个使用Oracle Pro*C预编译器的代码片段。与EXEC SQL CONNECT相同。请看下面的例子。你写好代码,然后通过Oracle Pro*C预编译器运行,产生C代码,然后将其编译为DLL中的函数调用 的一部分。你需要了解甲骨文,获得甲骨文数据库和客户端软件,包括预编译器来做这件事。我已经使用oracle很长时间了,比起其他所有的软件,我更喜欢它,只是因为我已经习惯了它。
祝您好运。
Oracle Pro*C预编译器从 上述内容中 生成C代码,使用 OCI--Oracle调用接口,即它的本地API与Oracle对接。
m.mick,
我所给出的是一个使用Oracle Pro*C预编译器的代码片段。与EXEC SQL CONNECT相同。请看下面的例子。你写好代码,然后通过Oracle Pro*C预编译器运行,生成C代码,然后将其编译为DLL中的函数调用的一部分。你需要了解甲骨文,获得甲骨文数据库和客户端软件,包括预编译器来做这件事。我已经使用oracle很长时间了,比起其他所有的软件,我更喜欢它,只是因为我已经习惯了它。
祝您好运。
Oracle Pro*C预编译器从 上述内容中 生成C代码,使用 OCI--Oracle调用接口,即它的本地API来连接 Oracle。
我忘了说,你将需要32位的Oracle即时客户端,在这里可以找到:http://www.oracle.com/technetwork/topics/winsoft-085727.html,64位的将不能在MetaTrader平台上使用。DB可以是64位的版本。你必须了解Oracle,它是一个复杂的软件。你可以免费开发,你只需要在Oracle创建一个注册,注册是免费的。所有的Oracle下载都是免费的。
戈里克。
是的,你是对的,ORACLE是一个复杂的软件。我从几年前就开始使用ORACLE了(但只是SQL和PL/SQL),它是最好的数据库。不幸的是,我没有使用Pro*C编译器或DLL的开发。所以对我来说,要做到这一点是相当困难的。但我要试试!:-)
我有几个关于你的伟大工作的问题。
如果我试图编译(Build 610)它,我将收到诸如 "数组仅通过引用传递 "的错误信息。为什么?我应该怎么做?为什么你用ucar[]而不是字符串?也许是因为Pro*C-Compiler的关系?
你是如何开发DLL的?也是用MT4吗?在meta editor.... 中编译后,我收到了一个*.ex4-文件.
如果我从Pro*C预编译器中收到.c文件,我应该如何处理该文件?我如何用这段代码开发或生成一个DLL?
Oracle Instant Client 是每个使用 oraDLL 的客户必须使用的。对吗?
预先感谢!!!。
如果我使用ORACLE Pro*C编译器,在将生成的代码插入dll后会出现很多错误。
下面是编译dll后的一些问题。
- UNAME_LEN、PWD_LEN和DBSTRING_LEN的声明丢失了
-EXPORT 这个词对吗,我会得到一个错误;extern这个词不对吗?
- connect1(还有2和3)是不同的类型:在声明中是char **,在使用中(strncpy)是char *;而且它是被贬低的,你应该使用strncpy_s
- sqlca没有被声明
- ...
谁能帮帮我?
谢谢。
尊敬的各位领导