mql5におけるOOP、テンプレート、マクロ、微妙な使い分け - ページ 24

 
Igor Makanu:
こうはいかない

そして、これはバグ・故障のようです。前回の記事で紹介したPSに注目

追記:もしまだ本当にやりたいなら、name_dll(ドットなし)を試してみてください、多分それは離陸するでしょう。

 
Vict:

そして、これはバグ・故障のようです。前の記事で紹介したPSに注目

MT4ではこの限りではありません

MT4は実行時にのみDLL自体を見ますが、私があなたと議論しているのは - コンパイラ自体によって許可されていない、つまり、コンパイラはこのように渡します。

#import "mylib.dll"
#import
#import "mylib"
#import

と、そのように書くと

#import 
"mylib.dll"   //'mylib.dll' - expressions are not allowed on a global scope
#import

つまり、厳密な構文指示 #import と引用符で囲まれた文字列があり、それがすべて1行に書かれています。

しかし、マクロ置換で #import "mylib.dll" を私の組み合わせで置き換えることができないのはなぜでしょうか?

ビクト

追記:もしまだ本当にやりたいなら、name_dll(ドットなし)を与えてみてください、多分それは離陸するでしょう。

条件付きコンパイルでインクルードもビルドできないのはなぜか?- MQLでは、すべてが非常にプリミティブに動作します。私が理解していないだけであってほしいが
 
Igor Makanu:

MT4ではこの限りではありません

MT4は実行時にのみDLL自身を見ますが、私があなたと議論しているのは - コンパイラはそれを通過させない、すなわち、コンパイラは次のように通過させるでしょう。

と、そのように書くと

つまり、厳密な構文指示 #import と引用符で囲まれた文字列があり、それがすべて1行に書かれています。

しかし、なぜ私の組み合わせのために#import "mylib.dll "をマクロで代用できないのか、誰か知っていますか?

条件付きコンパイルでインクルードもビルドできないのはなぜか?- MQLでは、すべてが非常にプリミティブに動作します。私が理解していないだけであってほしいが

なぜうまくいかないのかわからない、私にはうまくいっている。

#define  DD "jkjk.dll"
#import  DD
void fn();
#import
あとは、異なるEAに異なるDDを設定するだけです(「lib_1.dll」「lib_2.dll」)。
 
Vict:

なぜあなたには効かないのか、私には効くのです

あとは、異なるEAに異なるDDを設定するだけです(「lib_1.dll」「lib_2.dll」)。

すみません、忘れていました。私のソースは、µlで、slangプリプロセッサーに渡されています - はい、それは動作しません。

 
Vict:

すみません、忘れていました - 私のソースは、µlで、スラングプリプロセッサを通過します - はい、それは動作しません。

一般的には、MQLを取ったので、意図したとおりに動作するでしょう

#ifdef  USE_DLL_NUMBER
   #ifdef  USE_DLL_NUMBER02 
      #import "mylib2.dll"
   #endif 
#else 
#import "mylib.dll"   
#endif

メインコードで2つのマクロ置換を宣言しています。

#define  USE_DLL_NUMBER

#define  USE_DLL_NUMBER02 

...は、1つのマクロ USE_DLL_NUMBER02に削減します - 一般的に私に合うものに似ています - 私はUSE_DLL_NUMBER03、USE_DLL_NUMBER04を書きたい - 将来的に必要性が生じた場合。

 
Igor Makanu:

...USE_DLL_NUMBER02 - は、一般的に私に合うものに似ています - 私はUSE_DLL_NUMBER03、USE_DLL_NUMBER04を書くことができるようにしたい - 将来的に必要な場合は、単一のマクロにそれを 減らす

一般に、ブルートフォースの助けを借りて、この問題を解決することができました。

#ifdef  USE_DLL_NUMBER01 
#define  USE_DLL_NUMBER 
#endif
#ifdef  USE_DLL_NUMBER02  
#define  USE_DLL_NUMBER 
#endif
#ifdef  USE_DLL_NUMBER03 
#define  USE_DLL_NUMBER 
#endif
#ifdef  USE_DLL_NUMBER04 
#define  USE_DLL_NUMBER 
#endif
#ifdef  USE_DLL_NUMBER05 
#define  USE_DLL_NUMBER 
#endif
 

mql4はなぜ値によって動作する#ifマクロを実装しないのでしょうか?

#define  Znah 0
#define  PrmI int    Peremen=6;
#define  PrmD double Peremen=3.345;

#if  Znah//если больше 0 то появится переменная int Peremen
   PrmI
#else
    PrmD//иначе появится переменная double Peremen
#endif
その結果、後続のプログラム全体を適切なタイプに修正することができます。
 
falseを返す式に出会ったことがない。
ORDER_TIME_DONE_MSC == DEAL_TIME_MSC

そのため、取引履歴から注文執行時間の統計を取ることは困難です。

成行注文でORDER_TIME_SETUP_MSCの 値を一致させても、注文では意味がないのです。

 
旧式のものである可能性が高いです。const 修飾子は、オブジェクトが変更されないことを保証するものではありません。
struct A
{
  int i;

  void f( const A &Value )  
  {
    Print(Value.i); // 0
    
    this.i = Value.i + 1;
    
    Print(Value.i); // 1
  }
};

void OnStart()
{
  A a;
  
  a.f(a);
}


コンパイラによっては、このような状況で警告を出すものもあるでしょう。

 

fxsaber:

おそらく、一部のコンパイラはこのような状況で警告を出すでしょう。

指定子はオブジェクト全体ではなく、参照を参照しています。すべてが正当であり、なぜコンパイラは悪態をつかなければならないのでしょうか?

理由: