グラフィカルモードでMQLのGUIを作成する。 - ページ 5

 

EAで10分後にシャープで描いた簡単な形の例です。このフォームは、ソケットやファイルなどを使用せずに、EAから直接ネイティブDLLとして、チャートからティックを受け取ります。そして、その用紙はチャートに添付されています。添付ファイルに何らかの問題があり、解決しなければならない。でも、付けないことも可能です、好きなように。

 
Алексей Барбашин:

EAで10分後にシャープで描いた簡単な形の例です。このフォームは、ソケットやファイルなどを使用せずに、EAから直接ネイティブDLLとして、チャートからティックを受け取ります。そして、その用紙はチャートに添付されています。添付ファイルに何らかの問題があり、解決しなければならない。しかし、それは付けることができません - あなたが好きなように。

GitHubからどのコンパイラを使用したか教えてください。それとも、手作業でコンパイルしたシャープを編集したのでしょうか?必要ないC++のDLLを混合コード(マネージド+アンマネージド)で書くと楽です。

 
Yuriy Asaulenko:

GitHubからどのコンパイラを使用したか教えてください。それともシャードコンパイルを手作業で編集したのでしょうか?いい加減なことを。C++のDLLを混合コード(マネージド+アンマネージド)で書くと楽です。

前の記事で書きました:すべてVS社内ツールで行っています。VS 2017 Communityを使用しています。ちょうどプロジェクトの最初に、Nugetを使ったDllExportライブラリが接続されています。プロジェクトをコンパイルした後、TOTALLYという言葉から、何も手動で確定する必要はありません。

R.Gieseckeの テンプレートはお勧め しません。ここに本物のタンバリンがあり、少しでも始まれば。このライブラリーを使えば、その違いを感じることはないでしょう。通常のコンパイルでは、DLL自体が「ネイティブになる」のです。

 
Алексей Барбашин:

前の記事で書きました:すべてVS社内ツールで行っています。VS 2017 Communityを使用しています。ちょうど、プロジェクトの最初に、Nugetを使ったDllExportライブラリが接続されています。EVERYTHINGという言葉から、プロジェクトをコンパイルした後に手作業で確定する必要のあるものはありません。

はい、はい、まさにNugetで。それは私のために動作しませんでしたが、C-APIとの相互作用のための非標準のDLL、+コールバック関数を増やしたものがあった。なぜかコンパイラと記憶していた、とか、あれは別解だった、とか。

そしてこの場合、解決策は実にシンプルで良いのです。

 
Алексей Барбашин:

なぜ左なのか?全てはVSのインハウスツールで行われます。NugetにはDllExportライブラリがあり、System.Runtime.InteropServicesクラスを一度修正すれば、すべて正常にコンパイルされる。だから、タンバリンダンスも必要ないし、ラッピングも必要ない。フォームの作成は、Maximが提案するように、追加ファイルに書くよりも、c#の方がはるかに簡単です。私はマキシムや彼の作品を尊敬していますが、この場合、ネットの世界は何の困難もなく私たちに開かれているのです。

面白いですね、ご自身で確認されたのでしょうか?MT4 - C++dll - C#dllの接続で、C#dllを直接読み込めないことがありました。

https://www.nuget.org/packages/DllExport/ ですか?

DllExport 1.6.0
DllExport 1.6.0
  • www.nuget.org
The open implementation of unmanaged exports for .NET ( DllExport )        Source code and all details here: https://github.com/3F/DllExport                To configure projects via current package:        ========================================================        DllExport -action Configure -dxp-version 1.6.0...
 
Алексей Барбашин:

前の記事で書きました:すべてVS社内ツールで行っています。VS 2017 Communityを使用しています。ちょうど、プロジェクトの最初に、Nugetを使ったDllExportライブラリが接続されています。プロジェクトをコンパイルした後、TOTALLYという言葉から、何も手動で確定する必要はありません。

R.Gieseckeの テンプレートはお勧め しません。ここに本物のタンバリンがあり、少しでも始まれば。このライブラリーを使えば、その違いを感じることはないでしょう。あなたのDLLは、通常のコンパイル時に「ネイティブになる」のです。

Tzekさん、詳しく教えてください。この例の課題は、EAから情報を取得してコマンドを送信するパネルをC#で作成することです。その際、dllexportはどのように使用するのですか?

綴る必要はなく、ステップ、何を、どのように反応させるか?

 
Alexey Volchanskiy:

それは興味深いですね、ご自身で確認されたのでしょうか?以前はMT4-C++dll-C#dllのリンクで、C#dllを直接読み込めなかった。

https://www.nuget.org/packages/DllExport/ ですか?

もちろん、確認しましたよ。上記でフォームを使ったDLL作成の例を挙げました。

 
Алексей Барбашин:

もちろん、そうです。上記でフォームを使ったdllの例を挙げました。

この写真はその一例でしょうか。

よし、自分でやるぞ。

 
Alexey Volchanskiy:

テズカ、詳しく教えてください。この例の課題は、EAから情報を受け取り、コマンドを送信するパネルをC#で作ることです。その際、dllexportはどのように使うのですか?

綴る必要はなく、手順、何を、どう反応させるかだけでいい。

1.c# クラスライブラリ(ネットフレームワーク)でプロジェクトを作成する

2.NuGet から DllExport ライブラリをプロジェクトに追加します。サーバーからダウンロードするのがよいでしょう。バッチファイルをプロジェクトフォルダに入れる。

3.コマンドラインからライブラリを起動し(ハブに動画があります)、System.Runtime.InteropServices.Libraryを変更し、System.Runtime.InteropServices.Libraryを変更しました。

この時点で、すべての準備が完了したことになります。プロジェクトの再スタート

4.エクスポート関数を 作成し、その前に[DllExport]y修飾子を追加します。 手順3が正しく実行されていれば、コンパイラは修飾子について文句を言うことはありません。

5.プロジェクトにフォームを追加し、必要に応じて作り上げる。

6.エクスポートされた関数のクラス(ステップ1で作成)に、フォームを開く機能を追加します(例:Start

7.ウィンドウズ・フォームでアプリケーションを作成するときにメイン関数で行われるように、OpenDialogなど、フォームを開く関数を作成します。

8.Start関数で、OpenDialog関数を実行メソッドとして指定するスレッドを作成します。

9.EA/indicator/scriptを作成し、通常通りDLLを接続します。))

10.mqlからStart関数を呼び出す

フォームは別スレッドで起動され、通常のモーダルダイアログのようにmqlの処理を停止することはありません。

mqlからフォームへのデータ転送は、アプリケーション自体のクラスやスレッド間のデータ転送と同じように行われます。

1.mqlがデータを転送するために呼び出す関数を、エクスポートするクラス内に作成します(例:SendTick)。

mqlは、[DllExport]修飾子がインストールされているクラスメソッド(関数)だけを見ることができることを忘れないでください。

2.このクラスで、パラメータを指定してイベントデリゲートを作成します。

3.フォームの中で、エクスポートされたクラスのイベントを購読する必要があります。

4.mqlからSendTickメソッドを呼び出す場合、作成されたイベントを呼び出し、パラメータを渡します。

5.フォームでは、イベントをインターセプトしてデータをフォームに送ったり、何か他の処理をするイベントハンドラを作成します。

以上です。他に必要なものはありません。

念のため、フォームとエクスポートクラスは異なるスレッドで動作しているので、フォームに情報を載せるには、隣のスレッドからデータ処理デリゲートが必要です。

成功したら、その「結果」と「シンプルになった感想」を教えてください。)))

この中で最も「難しい」のは、ライブラリーの設置でしょう。)))

 
Alexey Volchanskiy:

この写真はその一例でしょうか。

なるほど、自分で考えてみる。

アレクセイ、写真を詳しく説明しました。))また何か質問があれば聞いてください!お答えします。