記事"MetaTraderプログラムを簡単かつ迅速に開発するためのライブラリ(第10部): プログラムリソースの作成と格納"についてのディスカッション

 

新しい記事 MetaTraderプログラムを簡単かつ迅速に開発するためのライブラリ(第10部): プログラムリソースの作成と格納 はパブリッシュされました:

この記事では、プログラムのソースコードにデータを保存し、それらから音声ファイルとグラフィックファイルを作成する方法について説明します。アプリケーションを開発するとき、多くの場合、音声と画像が必要です。MQL言語には、このようなデータを使用するいくつかの方法があります。

EAをコンパイルした後、ファイル作成結果を操作ログに表示し、コインの落下音を再生し、画面の右下隅に2つの画像で構成されるLED画像を表示します。LEDをクリックして画像を切り替えることができます。実際、これは2つの状態(オン/オフ)を持つボタンです。



ご覧のとおり、すべてが想定どおりに機能します。正常なファイル生成に関するメッセージが操作ログに表示され、クリックするとLEDの色が変わり、ターミナルデータフォルダを開いて([File]-> [Open Data Folder])MQL5\Files\DoEasy\Resource\に入ると、 新しく作成されたすべてのファイルを含むImagesサブフォルダとSoundsサブフォルダを見ることができます。

作者: Artyom Trishkin

 

あなたは1バイトを5文字("0xNN,")でエンコードしている。

Base64は、バイナリデータをテキストに密に詰め込むために使われる。私のテストでは、1バイトあたり1.36文字でした。

以下はその例である。

void 
OnStart() {
        uchar result[], result2[];
        uchar key[] = { 0 };
        uchar data[];
        int len1 = StringToCharArray("The quick brown  fox  jumps  over  the  lazy  dog", data);
        
        int len2 = CryptEncode(CRYPT_BASE64, data, key, result);
        Print("len1=", len1, ", len2=", len2, ", result=", CharArrayToString(result));

        CryptDecode(CRYPT_BASE64, result, key, result2);
        Print("result2=", CharArrayToString(result2));
}

len1=50, len2=68, result=VGhlIHF1aWNrIGJyb3duICBmb3ggIGp1bXBzICBvdmVyICB0aGUgIGxhenkgIGRvZwA=


 
Edgar:

1バイトが5文字("0xNNN,")でエンコードされています。

Base64は、バイナリデータをテキストに密に詰め込むために使われる。私のテストでは、1バイトあたり1.36文字を得た。

以下はその例である。

len1=50, len2=68, result=VGhlIHF1aWNrIGJyb3duICBmb3ggIGp1bXBzICBvdmVyICB0aGUgIGxhenkgIGRvZwA=


つまり、ここはそういうことだ...。
 
Artyom Trishkin:
ここで話しているのはそういうことではなくて...。

ああ、コンパイル用のデータがあって、ex5では1:1を占めるということですね。そう、ここに詰める必要はない。

 
Edgar:

ああ、コンパイル用のデータがあって、ex5では1:1を占めるということですね。そうです、ここに詰める必要はありません。

後で、プログラム・リソースのストレージが追加されます - コンパイラはそこでデータを圧縮します。