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

 

アナウンスメント(https://www.metatrader5.com/ru/releasenotes/terminal/1898)に例が示されている。

MQL5

  1. 関数の "スマート "インポートによる.NETライブラリのネイティブサポートを追加しました。特別なラッパーを書くことなく、.NETライブラリを使用できるようになりました。

    .NETライブラリの関数を使用するには、特定の関数を指定せずにDLL自体をインポートするだけで十分です。MetaEditorは、作業可能なすべての関数を自動的にインポートします:
    • 単純構造体(POD、plain old data) - 単純なデータ型のみを含む構造体。
    • パブリックな静的関数。そのパラメータでは、単純な型とPOD構造体またはその配列のみが使用されます

    ライブラリから関数を呼び出すには、インポートするだけです: .
    #import "TestLib.dll"
    
    //+------------------------------------------------------------------+
    //| スクリプト番組開始機能|
    //+------------------------------------------------------------------+
    void OnStart()
      {
       int x=41;
       TestClass::Inc(x);
       Print(x);
      }
    TestClassクラスのInc関数のC#コードは以下のようになる:
    .
    public class TestClass
    {
       public static void Inc(ref int x)
       {
        x++;
       }
    }
    スクリプトは値42を返します。

    .NETライブラリ・サポートに関する作業は進行中であり、今後のバージョンではその使用を拡大する予定です。

  2. WinAPI関数のサポートが標準ライブラリに追加されました。MQL5プログラムでオペレーティング・システム関数を使用するために、ライブラリを手動でインポートしたり、関数シグネチャを記述したりする必要がなくなりました。MQL5Include/WinAPIカタログからヘッダー・ファイルを接続するだけで十分です。

    WinAPI関数は目的別に別々のファイルにグループ化されています:

    .
    • libloaderapi.mqh - リソースを扱う
    • memoryapi.mqh - メモリ・ハンドリング
    • processenv.mqh - 環境を扱う
    • processthreadsapi.mqh - プロセスを扱う
    • securitybaseapi.mqh - OS のセキュリティシステムを操作する
    • sysinfoapi.mqh - システム情報を取得する
    • winbase.mqh - 一般関数
    • windef.mqh - 定数、構造体、列挙型
    • wingdi.mqh - グラフィカル・オブジェクトの操作
    • winnt.mqh - 例外処理
    • winreg.mqh - レジストリ操作
    • winuser.mqh - ウィンドウとインターフェースの管理
    • errhandlingapi.mqh - エラー処理
    • fileapi.mqh - ファイル操作
    • handleapi.mqh - ハンドルの処理
    • winapi.mqh - すべての関数の接続(WinAPIヘッダーファイル)。

    バインディングは64ビット・アーキテクチャでのみ動作します。


MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5
MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5
  • 2018.10.26
  • MetaQuotes
  • www.metatrader5.com
Теперь вы можете выносить графики финансовых инструментов за пределы окна торгового терминала. Это удобно при работе с несколькими мониторами. Например, на одном можно расположить основное окно платформы и следить за состоянием счета, а на другом — графики для оценки ситуации на рынке. Чтобы отделить график от терминала, отключите опцию...
 
Nextor Visual Studio 2022をインストールし、ボタン付きのフォームを作成し、MetaTrader 5で実行すると、エラーが発生します。

Visual Studio community2019では すべて作者の通りに動きますが、作者がこう書いています:

「各フォームには要素のパブリックリストがあります。各フォームには、それが含む要素のパブリックリストがあります。要素のリストを調べて、メソッドはコントローラがサポートできるものを見つけ、必要なイベントを購読します。フォーム上の要素がコントローラによってサポートされていない場合は、単に無視されます。"

残念なことに、SplitContainerやDataGridViewをテストフォームに配置すると、フォームが全く起動しません、なぜかは不明ですが、Chartのような複雑なコンポーネントは起動しました。

どのようなコンポーネントを修正に使用できるかのテスト例を同封します(フォームは起動しますが!)。

ファイル:
TESTGUIC.zip  706 kb
 

コントローラを作成しようとしたとき GuiControllercontroller= new GuiController(assembly, form, m_global_events);
gives Unexpected exception: The key with this name already exists (for DataGridView) and the controller is not created (the form is created, probably it can be shown, but without the controller how to control it?).

SplitContainerコンポーネントやDataGridViewコンポーネントがない場合は問題ありません。

 
Nikolai Karetnikov #:

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

記事のここです

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

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

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

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

私も同じ問題を抱えていました。

ClickOnElementの代わりにGuiEventType::ClickOnElementと書きました。その後、何の問題もなくコンパイルされ、動作するようになりました。しかし、もしそうだとしたら、Vasilyにとってどのように機能したのか本当に不明です。おそらく私が何か間違ったことをしたのだろう...。

しかし、そうでなければ、このことは本当に必要で便利なことだ。MQL5に似たようなものがないのは残念だ。

 
MQL_User #:

私も同じ問題を抱えていた。

ClickOnElementの代わりにGuiEventType::ClickOnElementと書きました。その後、何の問題もなくコンパイルされ、動作するようになりました。しかし、もしそうだとしたら、Vasilyにとってどのように機能したのか本当に不明です。もしかしたら、私が何か間違ったことをしたのかもしれない...。

しかし、そうでなければ、これは本当に必要で便利なものだ。MQL5に似たようなものがないのは残念だ。

このようなエラーがありました:

...ClickOnElementの 代わりにGuiEventType::ClickOnElementと 書きました!

 
Mano パラメータの マーシャリングのように、MtGuiController.dll.上でいくつかの変更を行う必要があります。

これはMT4では動作しません。私は結果を得ずに試しました。

 
Pete #:

私はMQL5の初心者ですが、この記事から多くのことを学びました!ありがとうございました!


ひとつ質問があります。この2日間、以下のことを理解するのに少し苦労しています。


各ステップは別のコンピューターでも何度か成功したのですが、コードをコンパイルしようとすると毎回エラーメッセージが表示されます。


MQLコンパイラーは次のように述べています:「というエラーメッセージが表示されます。


MQL5からこれらの列挙を "コメントアウト "すると、それに従って動作する。これは、コードは動作するが、列挙を読み取ることができないということを意味するので、興味深い。

どなたか教えていただけると助かります。)


ありがとう、

MQHファイルでも、DLL内で宣言されたのと同じように列挙型を宣言する必要があると読みました。

 
Mano パラメータの マーシャリングのように、MtGuiController.dll.上でいくつかの変更を行う必要があります。

string ReceiveEvent(int event_n); // Returns JSON string.. Use JAson.mqh to Deserialize objects

OnTimer() 内でこれを使用するにはどうすればよいですか?

記事で説明されているのと同じアプローチを使用しています。

void OnTimer()
{
   CJAVal data;
   
   for(static int i = 0; i < EventsTotal(); i++)
   {
      data.Deserialize(ReceiveEvent(i));
      Print(data.["id"].ToStr());
        
   }   
}


質問ですが、ReceiveEvent関数の内部でどのようなintを渡す必要があるのでしょうか?
無知で申し訳ありませんが、よくわかりません。
 
こんにちは!ドットネットアプリケーションをMT5/4に統合することができたので、この記事はとても役に立ちました。
執筆者に感謝します。

私はc#ではなくvbに慣れています。vb dot netでフォームを作成し、MT5ターミナルに表示させようとしましたが、失敗しました。

どなたか教えてください。
このコネクタはc#しかサポートしていないのでしょうか?
vb.netで動作する可能性はありますか?
ご助力をお願いします。
よろしくお願いします。
 

実行時にエラーを報告するGuiMtController.mq5プログラムのどこが悪いのか教えてください。

「GuiMtController.mq5」。
ClickOnElement'-宣言されていない識別子
1エラー,0警告
ファイル:
k9un.jpg  160 kb