MT4のビルド600(Build600)系バージョンアップに伴うShellExecuteAのエラーについて

MT4がビルド600(Build600)系バージョンアップしたことによる互換性の問題で

従来のShellExecuteAファンクションがそのままでは使用できない不具合がありました。

たとえば以下のようなMT4から外部アプリケーションを開くコードです。

従来の書き方だと、ヘッダ部分で

#import “shell32.dll”
int ShellExecuteA(int handle, int , string , string, string, int);
#import

そしてstart内で

int start(){
int test = ShellExecuteA(0, 0, “C:\\Windows\\notepad.exe”, “”, “”, SW_SHOW);
}

のようにすれば動きましたが、

バージョンアップ後は、ShellExecuteAShellExecuteWに変更しないと動かないようです。(他はそのままで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);

}

コメント

タイトルとURLをコピーしました