[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 5. - 页 250

 
TarasBY:
首先,你计算所有未平仓订单的当前利润,然后将其与申报水平进行比较:如果它更高,你就删除所有订单。这个程序(不仅如此)是由这个 EA完成的(代码也在那里)。

谢谢你的提示
 

我不明白。

gyfto:
//C++
MT4_EXPFUNC int __stdcall GetStrAddress(const char *str) {    
    MqlStr* s = (MqlStr*)str;
    return (int)s->string; 
}

竺可桢
它仍然是这样。

MT4_EXPFUNC int stdcall GetStrAddress(LPCSTR szStr)
 {    
  return(int(szStr));
 }

用这个代码运行了三次。

#property indicator_chart_window
#import "stdlib.ex4"
string IntegerToHexString(int integer_number);
#import "StrAddress.dll"
int OldGetStrAddress(string str);
int GetStrAddress(string szStr);
#import

int addrOld;
int addrNew;

int init()
  {
   string s=""; strAddress (s);
   s=s+"something"; strAddress (s);
   s="MyStr"; strAddress (s);
   s="mystr"; strAddress (s);
   return(0);
  }

int start()
  {
   return(0);
  }
void strAddress (string myStr)
  {
   addrOld=OldGetStrAddress(myStr);
   addrNew=GetStrAddress(myStr);
   Print(" строка ", CharToStr(34), myStr, CharToStr(34), ", старый вариант: ", IntegerToHexString(addrOld), ", новый вариант: ", IntegerToHexString(addrNew));
  }

这在日志中有所反映。

строка "", старый вариант: 656D6F73, новый вариант: 01CD8A90
строка "something", старый вариант: 6E696874, новый вариант: 01CD9010
строка "MyStr", старый вариант: 00360072, новый вариант: 01CD8AA0
строка "mystr", старый вариант: 00360072, новый вариант: 01CD8AA8

строка "", старый вариант: 656D6F73, новый вариант: 01C97858
строка "something", старый вариант: 6E696874, новый вариант: 01CDCC30
строка "MyStr", старый вариант: 00360072, новый вариант: 01C978868
строка "mystr", старый вариант: 00360072, новый вариант: 01C997870

строка "", старый вариант: 656D6F73, новый вариант: 01D93108
строка "something", старый вариант: 6E696874, новый вариант: 01CC5A58
строка "MyStr", старый вариант: 00360072, новый вариант: 01D93118
строка "mystr", старый вариант: 00360072, новый вариант: 01D93120

在第一种情况下,我们有一个指向MqlStr.string结构域第一个元素的指针,在第二种情况下,我们有一个指向字符串第一个元素的指针(LPCSTR仍然是同一个const char*)。我们看到不同的地址。为什么?事实证明,作为数组char的字符串和作为内部结构的字符串在MQL4中的表示方式有不同的地址?或者这意味着ExpertSample中描述的内部格式的 "字符串结构 "是人为的,而它在MQL4中的内部格式是lpsz?或者是我把第一个代码弄错了?

 
大家好,请告诉我,在编译之后,EA的图标上出现了一个锁,我只能通过程序在下载窗口中看到它,而在文件夹中却看不到它,如何解决这个问题?你能解决这个问题吗?
 
在一些例子中,我看到return(-1)、return(0)或只是return。我使用return(0)来从这个位置中断程序。你能告诉我return(-1)和return是做什么的吗?
 
gyfto:
还是说在ExpertSample中描述为内部格式的 "字符串结构 "是人为的,事实上它在MQL4中的内部格式是lpsz?

这意味着在DLL中,字符串是作为char*而不是作为MqlStr传输的。 但这并不 意味着在ex4程序中,字符串不是作为MqlString存储的。一般来说,从ex4到dll的参数转移 是一个相当复杂的过程(据开发者说),伴随着各种检查和参数转换。
 
laveosa:
大家好,请告诉我,在编译之后,EA的图标上出现了一个锁,我只能通过程序在下载窗口中看到它,而在文件夹中却看不到它,如何解决这个问题?谢谢你。
Win7和终端是在系统驱动器上?你想摆脱当前和未来的问题--把终端移到另一个驱动器,"一切都会好起来的"。
 
paladin80:
在一些例子中,我看到return(-1)、return(0)或只是return。我使用return(0)来从这个位置中断程序。你能告诉我return(-1)和return是做什么的吗?
它是函数的返回值。回到数学 上来。
 
paladin80:
在一些例子中,我看到return(-1)、return(0)或只是return。我使用return(0)来终止这个地方的程序。请告诉我,return(-1)和return是做什么的?

return(-1)返回减一作为函数的结果,(-1)只有在该程序的开发者自己把它放在那里时才有意义。否则,它毫无意义。

return简单地终止了函数(当返回类型为void时使用)。

 
TarasBY:
这是该函数返回的值。回到数学上

一般来说,return(0)会停止int start()函数并等待下一个刻度。如果没有数字或数字为-1,在int start()中会发生什么?

 
TarasBY:
Win7和终端是在系统驱动器上?想摆脱当前和未来的问题--把终端移到另一个驱动器,"一切都会好起来的"。

非常感谢 :)我会试一试的。