MetaTrader拡張モジュール(DLL)の作成 - ページ 3

 

C++の質問です...MT4の外部DLL

皆さん、こんにちは。

私はC++で書いた外部DLLを持っています。しかし、私はまだC++にかなり慣れていないので、この問題があるのはそのせいかもしれないと思います。C#で書いた別のバージョンは問題なく動作しますが、C#のDLLをMQLで呼び出せるようにするには、それらを変更しなければならず、この変更が小さなメモリリークを引き起こすように見えます。このC++版について、どなたかが助けてくれることを期待しています。以下はその話です。

私は、取引戦略をプログラミングするための様々なライブラリをゆっくりと開発してきました。私がやろうとしていることの一つは、ロギング、ロック(リソースへのスレッドセーフなアクセス)、イベント通知のような様々なもののためのサービスの一貫したセットを開発することです。基本的には、MQLをより現代的なプログラミング・パラダイムに引き上げようとしているのです。とにかく、現在私は、EAが様々なトレードイベント(プレース、フィルド、クローズ)の通知を受け取れるようにするためのライブラリに取り組んでいます。これらのイベントは、イベントを受信するEAによって行われた取引の結果であるか、他のEAからのものである可能性があります。これを達成するために、私は基本的にメッセージパッシングを介してEA間の通信を容易にする外部DLLを使用しています。新しい取引イベントを探す発行EAがあり、イベントが発生すると、購読EAのキューにメッセージを入れます(各購読者は独自のキューを持ちます)。

一度に渡されるメッセージが1つだけである限り、すべてがうまく機能します。しかし、明らかにそれは全く受け入れられません。一度に複数のメッセージを渡すと、最初のメッセージが壊れてしまうのです("FILLED,1005167 "のようになるはずのメッセージを "1 "として返し続ける)。2つ目のメッセージは正常ですが、1つ目のメッセージは正常ではありません。2つ以上のメッセージはまだテストしていませんが、おそらく同じことが起こるでしょう。

もし、どなたか私が間違っていることの答えを知っていて、私の問題に光を当ててくださるとうれしいです。いくつか注意点があります。1) 私は最終的にこのコードをApache 2.0でリリースするつもりなので、このソースファイルもApache 2.0で公開されています...かなりスムーズに動作するようになったら、これをコミュニティにリリースするつもりでいます。2) ここで何度も「キュー」と言いましたが、ソースコードを見ると、代わりにvectorを使っていて、基本的にスタックのように使っていることが分かります。元々はキューを使っていたのですが、STLのキューで何か間違ったことをしている可能性を考えて、ベクターに変更しました。そんな幸運はありません。実際の実装はキューになる予定ですが、今のところキューもベクターも私には正しく動作していません。

何かヒントがありましたら、よろしくお願いします。

Brandon Wilhite

ファイル:
 

せっかくなので、私の経験談を紹介しようと思います。 あなたがやりたいと思っていることは確かにできますし、私自身も何度もやっています。

私が最初にMT4で使用するDLLを書き始めたとき、C++でそれを動作させることができませんでした。 Visual Studioのプロジェクト設定がいつも間違っていたのが原因だと思います(たくさんありますから)。 つい最近、CodeGuruからサンプルを見つけ、それを実際にコンパイルして使うことができました。 今、私は基本的にそのプロジェクトを一掃し、テンプレートとして使用しています。

その間、私はC#のDLLを書き、ここにある この優れたツールを使っています。 これは基本的にILを受け取り、アンマネージコードから呼び出せるように変更してくれます。 唯一の問題は、MT4がこれを行う際にメモリリークを起こすようだということです。 それがMT4のせいなのか、ILの改変のせいなのか、それとも何なのか、はっきりしたことは分からないが、そういうことはある。

次は、C++のラッパーを書くか、C++を勉強するか、どちらかにしようと思っている。 それでメモリの問題が解決するといいんだけど。

とにかく、あなたがやりたいと思っていることは間違いなく実現できます。 私はC#でMT4用のかなり複雑なDLLを書くことができました。リモーティング、ローソケット、http、WinFormsのようなものを含んでいます。 .NETでできることはほとんどすべて、この方法でMT4から呼び出すことができます(名前を挙げれば、おそらくやったことがあるはずです)。 そして、非常に信頼性が高いです。 唯一の問題は、比較的遅いメモリリークです。

Magick:
ありがとう、パトリック

FTPを使うというのはとても面白いアイデアですね。

ティックとローソクの情報を.netアプリに送り、このアプリが取引するタイミングをMTに連絡するのです。

そのために、次のようなものを見つけました:簡易ラッパーとインターフェース・ジェネレーター

しかし、私は初級プログラマーで、c++のラッパー中間層を持つことに何が関係しているのか、完全には理解していません。

もし、これがc++と.netの橋渡しをするのに役立つツールだと思われるなら、あなたの意見を聞きたいと思います。
 
bwilhite:
私はここにいたので、私の経験を共有しようと思いました。 あなたがやりたいことは確かにできますし、私自身何度もやっています。

MT4で使用するDLLを最初に書き始めたとき、C++では決して動作させることができませんでした。 Visual Studioのプロジェクト設定がいつも間違っていたのが原因だと思います(たくさんのプロジェクトがありますから)。 つい最近、CodeGuruからサンプルを見つけ、それを実際にコンパイルして使うことができました。 今、私は基本的にそのプロジェクトを一掃し、テンプレートとして使用しています。

その間、私はC#のDLLを書き、ここにある この優れたツールを使っています。 これは基本的にILを受け取り、アンマネージコードから呼び出せるように変更してくれます。 唯一の問題は、MT4がこれを行う際にメモリリークを起こすようだということです。 それがMT4のせいなのか、ILの改変のせいなのか、それとも何なのか、はっきりしたことは分からないが、そういうことはある。

次は、C++のラッパーを書くか、C++を勉強するか、どちらかにしようと思っている。 メモリ問題が解決するといいんだけど。

とにかく、あなたがやりたいと思っていることは間違いなく実現できます。 私は、C#でMT4用のかなり複雑なDLLを書くことができました。リモーティング、ローソケット、http、WinFormsのようなものを含みます。 .NETでできることはほとんどすべて、この方法でMT4から呼び出すことができます(名前を挙げれば、おそらくやったことがあるはずです)。 そして、非常に信頼性が高いです。 唯一の問題は、比較的遅いメモリリークです。

bwilhiteさんはライフセーバーですね。 それは素晴らしいツールのように見えます。もしかして、C#からMTとの通信を実演しているC#プロジェクトがありますか?私がやりたいのは、私の.netアプリにMTにいつ取引するかを教えさせることです。あるいは、お勧めのリンクがあれば教えてください。どんな助けでも大いに感謝します。

 

ありがとうございました。

 

Dll

こんにちは。

DLLを使用して、Excelのスプレッドシートで 注文を送受信することができますか?

DLLのこの点をどこで学ぶことができますか。

よろしくお願いします。

ラティーノ

 
codersguru:
MetaTrader拡張モジュール(DLL)を自作することに興味がある方は、こちらへどうぞ。

MetaTrader拡張モジュール(DLL)の作成 - パート1

MetaTrader拡張モジュール(DLL)を作成する - パート2

私はそれらを書いている別の部分(または2)がありますよ。

お楽しみに

Visual C++ 2008 Express Editionにアップデートしてください。

 
bwilhite:
せっかくなので、私の経験談を紹介しようと思います。 あなたがやりたいことは確かにできますし、私自身何度もやっています。

MT4で使用するDLLを最初に書き始めたとき、C++では決して動作させることができませんでした。 Visual Studioのプロジェクト設定がいつも間違っていたのが原因だと思います(たくさんのプロジェクトがありますから)。 つい最近、CodeGuruからサンプルを見つけ、それを実際にコンパイルして使うことができました。 今、私は基本的にそのプロジェクトを一掃し、テンプレートとして使用しています。

その間、私はC#のDLLを書き、ここにある この優れたツールを使っています。 これは基本的にILを受け取り、アンマネージコードから呼び出せるように変更してくれます。 唯一の問題は、MT4がこれを行う際にメモリリークを起こすようだということです。 それがMT4のせいなのか、ILの改変のせいなのか、それとも何なのか、はっきりしたことは分からないが、そういうことはある。

次は、C++のラッパーを書くか、C++を勉強するか、どちらかにしようと思っている。 そうすれば、メモリの問題も解決すると思います。

とにかく、あなたがやりたいと思っていることは間違いなく実現できます。 私は、C#でMT4用のかなり複雑なDLLを書くことができました。リモーティング、ローソケット、http、WinFormsのようなものを含みます。 .NETでできることはほとんどすべて、この方法でMT4から呼び出すことができます(名前を挙げれば、おそらくやったことがあるはずです)。 そして、非常に信頼性が高いです。 唯一の問題は、比較的遅いメモリリークです。

bwilhiteさんは、このスローリークの原因を特定することができましたか? もしあなたがまだその気なら、この分野であなたの助けを借りたいです。 現時点では、私はソケットを介してメッセージを送受信することができる単純なmql dllを探しています。 私はc#の基本に精通しているので、私が活用する方法を見つけることができれば、すべて良いです。

ありがとうございます。

 
Magick:
bwilhiteあなたはライフセーバーです! それは素晴らしいツールのように見えます。もしかして、C#からMTとの通信を実演しているC#プロジェクトがありますか?私がやりたいのは、私の.netアプリにMTにいつ取引するかを教えさせることです。あるいは、お勧めのリンクがあれば教えてください。どんなことでもご相談ください。

このMagickに何か運があったのでしょうか? これは、私がまさにやりたいと思っていることです。.netアプリがMTにいつ、何を取引するか教えてくれるのです。 もし、解決策が見つかったら教えてください。

また、私はbwihiteに感謝し、より多くを聞きたいと思います。 c#のdllのサンプルはありますか?

ありがとうございました。

 

自作のDLLを作成しているのですが、127のエラーに遭遇しています。

.cppファイルには(他のものが)含まれています。

MT4_EXPFUNC char* _stdcall DLLtest() {

return("testing!");

}

[/CODE]

header file contains:

#define MT4_EXPFUNC __declspec(dllexport)

MT4 file:

[CODE]

#import "mydll.dll"

string DLLtest();

もちろん、それがすべてではありませんが、これが適切な情報です。さて、私の理解に基づいて、MT4から関数を 呼び出そうとするものはすべてあります。

なぜか、それが存在することを「見て」いないのです。私のDLLに.defファイルがないことが原因かと思いましたが、手動で作成してもまだ動きません。また、MT4_EXPFUNCの行は、関数がどのようにでもエクスポートされることを意味するので、.defは不要だと考えています。コンパイルはうまくいき、EAもうまく動くのですが、関数を呼び出そうとすると、止まってしまいます。

私は途方に暮れています。私は本当にそれが.defの問題であると思ったが、私がそれを考えるほど、私はそれを信じていない。

ちなみに私はVisual C++ 2008 Expressを使用しています...。

どんな洞察でもありがとうございます。

-Jason

 

Visual C++ 2008 Expressを使用して、同じ127エラーが発生しました。解決策はまだありません。もし見つかったら投稿します。