記事"Net FrameworkとC#に基づくエキスパートアドバイザーと指標のためのグラフィカルインターフェイスの開発"についてのディスカッション - ページ 11

 

素晴らしい仕事です!

フォームを閉じるとMT5がクラッシュすることがあります。もちろん、処理されない例外が発生しますが、コードがどこにあるのかわからず、キャッチできません。

何かアイデアはありますか?

 
Artur Zas:

例のコードはWinForms専用だが、WPF用に簡単に変更できる。WPFシェル側で異なるイベントにバインドするだけです。コードは少し異なりますが、原則は同じです。

WinFormsウィンドウをXAMLコントロールのホストとして使用するだけなら、コードをそのまま使用することもできます。これは新しいXAMLアイランドで できます。この方法では、WinForm内で最新のUWPコントロールをすべて使用できます。

VisualStudio プログラムでフォームの代わりにウィンドウ・クラスをインクルードしようとしていますが、うまくいきません。あるいは、MQL5とWPFで動作する他の.dllをご存知ですか?
 

こんにちは!なぜかコンパイルできません。 LibrariesフォルダにMtGuiController.dllを入れました。


 
Copyright © 2020 ®kwancheetuck All rights reserved.預金所有権 MQL5
.
 
Vasiliy Sokolov:

宇宙船を宇宙に打ち上げたい。アイデアはたくさんあるんだけど、それも手に入らないんだ。

スタジオをダウンロードするのは大変だけど、XAMLインタプリタを自分で書き出すのは、何でもないことなんだけど、どうしても手が出ないんだ。

))

 
Rafil Nurmukhametov:

こんにちは!なぜかコンパイルできません。 LibrariesフォルダにMtGuiController.dllを入れました。


Rafilさん、何が問題かわかりましたか?

 
#import  "MtGuiController.dll"
string assembly = "C:\\MT5\\Form1.exe";

//+------------------------------------------------------------------+
//| エキスパート初期化関数|
//+------------------------------------------------------------------+
int OnInit()
  {
//--- タイマーを作成する
   GuiController::ShowForm(assembly, "Form1");
   EventSetMillisecondTimer(200);   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
|エキスパート初期化関数|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- タイマーを破壊する
   printf("enter deinit");
   GuiController::HideForm(assembly, "Form1");
   printf("exit deinit");
   EventKillTimer();
   
  }
//+------------------------------------------------------------------+
//| エキスパート・ティック機能|
//+------------------------------------------------------------------+
void OnTick()
{
//---
}
//+------------------------------------------------------------------+
//| タイマー機能|
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
   for(static int i = 0; i < GuiController::EventsTotal(); i++)
   {
      int id;
      string el_name;
      long lparam;
      double dparam;
      string sparam;
      GuiController::GetEvent(i, el_name, id, lparam, dparam, sparam);
// if(id == ClickOnElement)
      if(id == 9)
         printf("Click on element " + el_name);
   }
  }
//+------------------------------------------------------------------+

Vasiliy Sokolov、これを理解するのを手伝ってくれますか?

GuiMtController.mq5を取り、ライブラリをLibrariesに置き、.exeをc:㈳に置き、アセンブリを適宜定義します。

コンパイルすると、ClickOnElement変数が未定義であるというメッセージが表示される。これを任意の整数に置き換えてみる→コンパイルは正常だが、フォーム自体が起動しない。もちろん、DLLは許可されています。

 

誰かがつまずくかもしれない

以下はその記事の中の箇所である。

「おわかりのように、コンパイラーはネット・ライブラリーで定義された外部enumを理解し、その扱い方を知っています。

どういう理由かはまだわからないが、コンパイラーは頑なにC#の列挙型を理解しようとしない。

ただ、Vasily、あなたは取引パネルの「買い」と「売り」のボタンを逆に配置していますね)。

でも、全般的には、最高にクールなものが出来上がりました。ご苦労様でした!)

Документация по MQL5: Основы языка / Типы данных / Целые типы / Перечисления
Документация по MQL5: Основы языка / Типы данных / Целые типы / Перечисления
  • www.mql5.com
После объявления перечисления появляется новый целочисленный 4-байтовый тип данных. Объявление нового типа данных позволяет компилятору строго контролировать типы передаваемых параметров, так как  перечисление вводит новые именованные константы. В приведенном примере именованная константа January имеет значение 0, February имеет значение 1...
 
Nikolai Karetnikov:

誰かがつまずくかもしれない

記事のここです

「おわかりのように、コンパイラーはネット・ライブラリーで定義された外部列挙を理解し、その扱い方を知っている。

どういう理由かは知らないが、コンパイラーは頑なにC#の列挙型を理解しようとしない。

ただ、Vasily、あなたは取引パネルの買いボタンと売りボタンを逆に配置しています))

でも、全般的には、最高にクールなものが出来上がりました。ご苦労様でした!)

興奮するのを待つ。テーブルが動くかどうかチェックする。この問題は不明なままだった。高い頻度でデータを出力するときに大きな遅延があった。
 
Реter Konow:
興奮するのを待つ。テーブルが機能しているか確認するこの問題は不明なままだった。高い頻度でデータを出力すると、大きな遅延が発生した。

午後!)

ピーター、"were "ってどういう意味?"high "ってどういう意味?このトピックに関する議論がどこかにあったような