[ARCHIVE]フォーラムを乱立させないために、どんなルーキーの質問でも。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 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));
 }

このコードで3回走らせた。

#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構造体フィールドの最初の要素へのポインタがあり、2番目のケースでは、文字列の最初の要素へのポインタがあります(LPCSTRは依然として同じコンス char*です)。異なるアドレスが表示されます。な、なんで?配列のcharとしての文字列と、MQL4での表現の内部構造としての文字列とでは、アドレスが異なることが判明したのですが?それとも、ExpertSampleで内部フォーマットとして記述されている「文字列構造」は人工的なもので、MQL4での内部フォーマットはlpszであるということでしょうか?それとも、最初のコードを間違えてしまったのでしょうか?

 
こんにちは、あなたは私に助言してください、EAのアイコンをコンパイルした後、ロックが表示され、私は唯一のプログラムを介してダウンロードウィンドウでそれを見ることができ、フォルダ内のそれは目に見えない、それを修正する方法を教えてください。直せるか?
 
いくつかの例では、return(-1)、return(0)、または単にreturnが表示されます。return(0)を使って、この場所からプログラムを中断させるのです。return(-1)とreturnは何をするのか、教えてください。
 
gyfto:
それとも、ExpertSampleで内部フォーマットとして記述されている「文字列構造」は人工的なものであり、実際にはMQL4での内部フォーマットはlpszであるということでしょうか?

これは、DLLでは文字列がMqlStrとしてではなく、char*として転送されることを意味します。 しかし 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を返しますが、(-1) はそのプログラムの開発者が自分でそこに置いた場合にのみ意味を持つのです。そうでなければ、何の意味もありません。

returnは単に関数を終了させるだけです(戻り値の型がvoidの場合に使用されます)。

 
TarasBY:
この関数から返される値です。数学に 戻りましょう。

一般に、return(0)は int start()関数を停止させ、次のtickを待ちます。桁がない場合、または-1である場合、int start()はどうなりますか?

 
TarasBY:
Win7で端末はシステムドライブに?現在および将来の問題を取り除きたい - 端末を別のドライブに移動すれば「すべてうまくいく」。

どうもありがとうございました :)試してみます。