このコードは、MT4ビルド600でテストするまでは完璧に動作していましたが、私のサーバーからアカウントを検証しなくなりました。
angevoyageurさん、ご指摘ありがとうございます。
あなたの問題はInternetReadFile()にあります。新しいMQL4でWinInet関数を使用する方法の例として、https://www.mql5.com/en/code/1998 のEasyXml.mqhを参照してください(このコードはMQL4とMQL5の両方で動作します)。
要するに、InternetReadFile()にuchar[]配列を渡し、CharArrayToString()を使ってその配列を文字列に変換しているのです。MQL4で実質的にできることは、任意の長さのマネージド・メモリ・バッファを割り当て、それをDLLに渡し、必要に応じてデータをAnsiまたはUnicodeから変換することです。
要するに、InternetReadFile()にuchar[]配列を渡し、CharArrayToString()を使ってその配列を文字列に変換しています。MQL4で実質的にできることは、任意の長さのマネージド・メモリ・バッファを割り当て、それをDLLに渡し、必要に応じてデータをAnsiまたはUnicodeから変換することです。
トピックと答えを少し広げますが、新しいMQL4では、多くの関数の AバージョンとWバージョンのどちらかを呼び出すことが可能です。例えば、以下のスクリプトはGetTempPathAとGetTempPathWの両方の呼び出しを使用してWindowsの一時ディレクトリを取得します。
#import "kernel32.dll" int GetTempPathA(int,uchar & arr[]); int GetTempPathW(int,short & arr[]); #import void OnStart() { uchar AnsiStringBuffer[256]; GetTempPathA(255, AnsiStringBuffer); string strTempPathFromA = CharArrayToString(AnsiStringBuffer); short UnicodeStringBuffer[256]; GetTempPathW(255, UnicodeStringBuffer); string strTempPathFromW = ShortArrayToString(UnicodeStringBuffer); Print("Temp path via GetTempPathA(): ", strTempPathFromA); Print("Temp path via GetTempPathW(): ", strTempPathFromW); }
したがって、新しいMQL4から多くのAnsiのみのDLLコールを使用し続けることが可能です。
したがって、新しいMQL4から多くのAnsiのみのDLLコールを使用し続けることが可能です:必ずしもMQL4のコードと DLLの両方を更新する必要はありません。
... 他の例として、新しいMQL4からAnsiのDLLコールに 文字列値を渡すことができます。(実際の使用では、この回避策を使用してMessageBoxAを呼び出すのではなく、単にMessageBoxWを呼び出す ことになりますが、一般的なポイントは有用です。)
#import "user32.dll" // Declare the Ansi function as taking uchar[] input parameters instead of strings int MessageBoxA(int,uchar & arr1[],uchar & arr2[],int); #import void OnStart() { string strMessage = "Hello"; string strTitle = "Hi!"; // Convert the strings to uchar[] arrays uchar ucMessage[], ucTitle[]; StringToCharArray(strMessage, ucMessage); StringToCharArray(strTitle, ucTitle); MessageBoxA(0, ucMessage, ucTitle, 64); }
数時間この件で遊びましたが、まだうまくいきません。そうそう、私のためにこれを行うために誰かを雇うことを探しています;)
数時間この件で遊びましたが、まだうまくいきません。そうそう、私のためにこれを行うために誰かを雇うことを探しています;)
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
このコードは、MT4ビルド600でテストするまでは完璧に動作していましたが、私のサーバーからアカウントを検証しなくなりました。