エラー、バグ、質問 - ページ 1313

 
Konstantin Karpov:
コンパイル時に端末がどのビットモードかを判断する方法は?TERMINAL_X64 の 識別子は、関数用であるため、適合 しない。ヘルプに記載されていないマクロがある場合がほとんどですが、何らかの形で時折出てくることがあります :)
残念ながら、そうではありません。変数_IsX64がありますが、実行時に動作します。
 

32ビット端末用と64ビット端末用の2つのDLLを使用したいのですが、どうすればよいでしょうか?プログラムのコピーを2つ持っているのはカシコイ...。

ところで、ME x64でコンパイルしたコードが32bit端末でエラーなく動作するのか、それともコード実行に何か隠し味があるのか、経験のある方はいらっしゃいますか?

 

例えば、32ビット端末用ライブラリlibrary_x86.dllと64ビット端末用ライブラリlibrary_x64.dllには、funcTest(...)関数が存在します。

インポートが ファイル全体で見える場合、このような構成で書いてよいのでしょうか?

void CClass::Test(...) {
  код метода...

   if(TerminalInfoInteger(TERMINAL_X64)) {
      #import  library_x64.dll
         library_x64::funcTest(...);
      #import
   } else {
      #import  library_x86.dll
         library_x86::funcTest(...);
      #import
   }

   код метода...
}
とか、この手は使えないのか?
 
Konstantin Karpov:
それとも、この仕掛けが効かないのか?

私の知る限りでは、そうではありません。両方のDLLをインポートして、端末のビットレートに応じてどちらかの機能を呼び出す ことができます。

一般に、ビットレートによって2つのバージョンに分けることは、それほど妄想的な選択肢ではありません。

 

私は(標準セットのいずれか)インジケータを取り、Expert Advisorでそれを呼び出します。

iCustom (NULL, 0, "Momentum", 0, 1);

テスターで可視化したEAを実行したところ、すべてがうまくいき、インジケータも描画されました。

ここで、インジケータの1行を変更します。

ExtMomBuffer[i]=close[i]*100/close[i-InpMomPeriod];

をこの行に追加します。

ExtMomBuffer[i]=100;

そして今、インジケータは全く何も描画しません。垂直スケールさえも マークされません。

どこにエラーがあるのか?MetaTrader 4 build 765。

 
スケールを表示させるためには、ウィンドウ内に2つの異なる値が必要なのですね。EMNIPバグと言えるかどうかは分かりませんが。
 

よし、型破りな行動とでも言おうか......(笑)。

ありがとうございました。でも、もう一つ質問があります。ええ、こんな感じでしたよ。

ExtMomBuffer[i]=i%2;

そして、こうしてまた動かなくなったのです。

ExtMomBuffer[0]=i%2;

MTの古いバージョンでは動作していたのに、新しいバージョンでは何がいけないのでしょうか?

 

つまり、2つ目の選択肢では、値は1つです。

実は、間違っているかもしれないんです。

 

まあ、こうやってやっても、うまくいかないんだけどね。

ExtMomBuffer[0]=cnt++;

問題の核心は、EAの各ステップでインジケータの0バーに書き込もうとしても、何も起こらないということです。

 

掘る場所を見つけたような気がします。変更あり

ArraySetAsSeries(ExtMomBuffer,false);

に、何かが見え始めている。酔っぱらいに行くんだ