MQL5 でのShellExecute

http://forum.mql4.com/26550/page22 で、ヘルプファイルの内容が更新されています。注文用構造体の内部の変数名まで変わったので、サンプルEAは動かなくなっているかもしれません。
ベータテスト期間中にMetaTrader5を触るのは、やはり趣味の領域ですね..。今の時点で移植等されている人は、リリースまでに何度も書き換える必要があるかもしれないので覚悟しておきましょう。(笑)




さて、MetaTrader5 では、プログラム内部での文字コードUnicode に変わっています。その結果、従来 ShellExecuteA で呼び出していた外部アプリの実行が、そのままでは動きません。
Unicode に対応した ShellExecute は、以下のように書きます。

#import "shell32.dll"
int ShellExecuteW(int hWnd,string lpVerb,string lpFile,string lpParameters,string lpDirectory,int nCmdShow);
#import
void OnStart()
{
ShellExecuteW(0,"","notepad.exe","","",5);
}

これは、単に関数名の最後が A で終わっていたのを W に変えただけです。WindowsAPI のうち、文字列を引数にするタイプの関数は、関数名の最後に A がついたら、ANSI版、W がついたらUnicode版 というルールがあって、使用する文字コードの違いによって使い分ける必要があるので注意してください。





とりあえず、MQL5 でも ShellExecute が使えるということは、外部アプリとの連携(Growl での通知や注文ツールの起動など)は、問題無いので少し安心です。
ただ、DDE 機能は MetaTrader5 には無く、実装の予定も無くなってしまったようで、( 且つ、MetaTrader4 にDDEサーバ機能を追加するツールは、文字コード問題を解決しても微妙に動かないので...orz ) Excel との連携を考えている人には、嫌な状況です..。