ブログトップ 記事一覧 ログイン 無料ブログ開設

とあるMetaTraderの備忘秘録 RSSフィード Twitter

忙しいです。ネタもないし・・・

2010-06-13

初めてのDLL(1)/環境準備篇

MQL4 で、ある程度自由にプログラムが組める人は、実は、僅かな知識だけで、DLL作成まで可能です。DLLが作れるようになると、MQL4では処理が遅いコードをDLLのなかで計算させたり、他人に見られたくない部分をDLL内に隠したりすることができます。本格的に作るには、書籍等で勉強する必要がありますが、その前に雰囲気だけでも知っておけば、理解しやすいと思うので、簡単に紹介します。


DLL作成には、C言語の開発環境(コンパイラ)が必要です。私自身は開発者向けに販売されているVisual Stuido 2005を使用していますが、お試しでDLLを作りたい人には高価なので、無料のVisual C++ 2008 Express Edition をお勧めします。

(先月、Visual C++ 2010 Express もリリースされているのですが、まだ実績が少ないので古い方を使います..。2010 ではプロジェクトの変換に失敗するので、手作業でプロジェクトを作る必要があってややこしいのです..^^;;;


(続きは、画像が多くて重いので..ホントに興味のある人だけどうぞ..orz



インストール

(1) マイクロソフトのHPからダウンロードします。

http://www.microsoft.com/japan/msdn/vstudio/express/

にアクセスして…一番下の「過去のバージョン」にアクセスします。

f:id:fai_fx:20100613002015p:image

(2) Visual C++ 2008 Express のWebインストールをクリックします。

f:id:fai_fx:20100613002705p:image

(3) ダウンロード後、インストールを開始します。とても時間が掛かります..。

f:id:fai_fx:20100613002013p:image

↑フィードバックは…不要です。

f:id:fai_fx:20100613002012p:image

↑RSSコンテンツは要らない。

f:id:fai_fx:20100613002011p:image

↑SQL Server も必要無いのでチェックを外します。


Webからダウンロードして、何度か再起動される場合があるので、お茶でも飲みながら気長に待ちましょう..。



コンパイル

インストールが完了したら、ソースコードは編集せずにコンパイルだけを試します。

(4) experts\samples\DLLSample 内の ExpertSample.dsw をダブルクリックします。

f:id:fai_fx:20100613002010p:image

(5) いきなりライセンス登録画面が出たら、「今すぐ登録」で、キーを取得してください。

f:id:fai_fx:20100613002009p:image

(6) dswファイルは古いVisualC++のファイルなので変換が必要になります。

「すべてはい」を選んでください。

f:id:fai_fx:20100613002008p:image


(7) 起動が完了したら、何も手を加えずにコンパイルできるか確認します。

Debug を Release に変更してください。

f:id:fai_fx:20100613002007p:image

(8) ソリューションのビルドを選んでください。コンパイルが実行されます。

f:id:fai_fx:20100613002006p:image

↓ビルドに成功するとこんなメッセージが出ます。

f:id:fai_fx:20100613002119p:image

↓DLLSample内に Release フォルダが作成され、その中に ExpertSample.dll が出来上がります。

f:id:fai_fx:20100613002118p:image


出力ファイル名を変える

(9) 初心者は1つのプロジェクトを使いまわすと思うので、コンパイルで作成されるDLLのファイル名を変更します。

↓ExpertSample を選びます。

f:id:fai_fx:20100613002117p:image

↓この状態でプロジェクトのプロパティを開きます。

f:id:fai_fx:20100613002116p:image

↓構成プロパティ内のリンカの全般にある出力ファイル のDLL名を変えます。

f:id:fai_fx:20100613002115p:image

(10)ついでに、ビルド後に完成したDLL を MetaTrader の libraries フォルダにコピーするように設定します。

↓ ビルド後のイベントを選んで COPY "$(TargetPath)" ..\..\libraries と入力します。

f:id:fai_fx:20100613002114p:image


(11) この状態でソリューションのリビルド(再ビルド)を行います。

f:id:fai_fx:20100613002113p:image

↓以下のようなメッセージが出ます。

f:id:fai_fx:20100613002112p:image

↓ experts\libraries フォルダを見ると、新しく名前をつけた MySample.dll がコピーされているのが分かります。

f:id:fai_fx:20100613002111p:image

実際の開発では、リビルド -> MT4 起動 -> 動作確認 -> MT4 終了 ->DLL修正 ->リビルド

のサイクルを繰り返すことになります。


終わりに..

冒頭のプロジェクトの変換で ExpertSample.dsp,dsw は不要になったので削除します。

f:id:fai_fx:20100613002110p:image

↓次回起動時は、ExpertSample.sln をダブルクリックすればOKです。

f:id:fai_fx:20100613002728p:image



Visual C++ 2008 自体の機能は複雑怪奇ですが、DLLを作るのに必要な「操作」はこれだけなので、簡単ですよね?(無理・・・?^^;

次回は、ExpertSample.cppと ExpertSample.def ファイルの内容を説明したいと思います。

そんじゃ〜ね。

日本vs亀 2-1日本vs亀 2-1 2010/06/13 07:00 いつも興味深い内容で関心させられます。
ありがとうございます。

ところで、普通に(何のプロテクトもなしで)
自分の作成したEAを走らせていて、
利用している証券会社が、そのEAの中身を知ることは
簡単に出来るものでしょうか?

それとも、そんな心配は無用ですか?

もし過去に同じ質問&回答が存在していたらごめんなさい。。

お時間の許すときにお答えいただけたら
うれしく思います。

CorgiCorgi 2010/06/13 07:55 >そんじゃ〜ね。
つれない・・・w

faiさん、こんにちは。

>簡単ですよね?
抜群に簡単ではないです^^;

MT5と一緒で、いつか勉強しなきゃいかんと思いつつ先送りしてきましたが、
これを機に勉強させていただこうと思います。
MQL4では処理が遅いコードをDLLなら早くできるのであれば、そうしない手は
ないと思いました。

さっぱりわからないソフトなんですが、1台のPCに複数のMT4がある場合に、
DLLの出力先をCOPY "$(TargetPath)" ..\..\librariesとした場合には、
Visual C++ を起動したファイルのあるMT4のDLLファイルのみが影響を受ける
という認識で合ってますか^^;

saru999saru999 2010/06/13 09:13 おもしろそうな連載が始まりましたね。
今後の展開を、たのしみにしています(喜

QQQ1QQQ1 2010/06/13 10:03 >>carcass
やっと理解できました。
そりゃそうですよね。配信データから作成しているんですもんね。

お手数掛けました。有難う御座いました。

末っ子長男末っ子長男 2010/06/13 21:31 DLLで盛り上がっているところにスクリプトの作成希望です!

先日からトラップリピートイフダンに興味を持っているのですが、
↓の条件を満たすスクリプトの作成は可能でしょうか?
http://i.imgur.com/LpD1w.gif

暇で暇でスクリプトでもつくらなきゃやってられねーよ!
という状態になりましたら、作成お願いします。。

fai > 日本vs亀 2-1fai > 日本vs亀 2-1 2010/06/14 00:34 心配は無用と思いたいですが、根拠はありません。
どうしても心配なら、アカウントコピートレードでがんばるしかないでしょう..。

fai >Corgifai >Corgi 2010/06/14 00:37 そんじゃーね。は「ちきりん」というブロガーさんの名台詞なのです^^;

COPY "$(TargetPath)" ..\..\libraries
は、DOSコマンドで、
COPY C:\MT4...\XXX.DLL C:\MT4...\libraries
と実行するのと同じなので、その認識であっています。

MT4初心者MT4初心者 2010/06/14 01:04 はじめまして。
MT4でDLLを呼び出せないか調べていたらここにたどり着きました。

私は、VB.netはできるのですが、その他の言語はできないため、VB.netでDLLを呼ぶと「Hellow」を
返すというサンプルDLLを作ってみました。
それをMT4で呼び出そうとしましたが、呼び出すことができず困っています。
そもそもVB.netで作ったDLLをMT4で呼び出せないのでしょうか?

もしできない場合、C++のDLLを踏み台にして、VB.netで作ったDLLに実際の処理をさせるようなことは
できるのでしょうか?

お時間のあるときにでもコメントいただけると嬉しいです。

fai >MT4初心者fai >MT4初心者 2010/06/14 01:40 MT4 から直接呼び出すのはたぶん無理でしょう。
C++のDLLからは、COM相互運用を介してVB.netのDLLを使えるらしいですが..
・素直にC++でDLL本体を書いてしまうか、
・MT4-VBアプリ間のデータのやり取りをファイル渡しにする
方が楽だと思います。。

MT4初心者MT4初心者 2010/06/14 01:47 ご回答ありがとうございます。

いろいろと制限があるのですね。
教えていただいた方法を検討してみたいと思います^^

日本vs亀 2-1日本vs亀 2-1 2010/06/14 17:28 faiさん、どうもありがとうございます。 
なるほど、参考にさせていただきます。
いよいよ今日キックオフですね!?がんばれJAPAN!お邪魔いたしました。
またよろしくお願いします!

投稿したコメントは管理者が承認するまで公開されません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/fai_fx/20100613/1276361387