MT4がビルド600(Build600)系バージョンアップしたことによる互換性の問題で
従来のShellExecuteAファンクションがそのままでは使用できない不具合がありました。
たとえば以下のようなMT4から外部アプリケーションを開くコードです。
従来の書き方だと、ヘッダ部分で
#import “shell32.dll”
int ShellExecuteA(int handle, int , string , string, string, int);
#import
int ShellExecuteA(int handle, int , string , string, string, int);
#import
そしてstart内で
int start(){
int test = ShellExecuteA(0, 0, “C:\\Windows\\notepad.exe”, “”, “”, SW_SHOW);
}
int test = ShellExecuteA(0, 0, “C:\\Windows\\notepad.exe”, “”, “”, SW_SHOW);
}
のようにすれば動きましたが、
バージョンアップ後は、ShellExecuteAをShellExecuteWに変更しないと動かないようです。(他はそのままでOK)
元々ANSI(Shift_JIS)文字コードで引数を渡していた仕様が、Build600ではUnicodeに変更されたために起こる不具合のようです。
引数で日本語を使用していない場合でもエラーは発生します。
変更後のコード
#import “shell32.dll”
int ShellExecuteW(int handle, int , string , string, string, int);
#import
int start(){
int test = ShellExecuteW(0, 0, “C:\\Windows\\notepad.exe”, “”, “”, SW_SHOW);
}
コメント