#import "TestLib.dll" //+------------------------------------------------------------------+ //| スクリプトプログラム開始関数 | //+------------------------------------------------------------------+ void OnStart() { int x=41; TestClass::Inc(x); Print(x); }TestClassのInc関数のC#コードは下記のとおりです。
public class TestClass { public static void Inc(ref int x) { x++; } }実行されると、スクリプトは42を返します。
struct MqlTick
{
datetime time; // 最後の価格更新時刻
double bid; // 現在の売値
double ask; // 現在の買値
double last; // 現在の最終約定値
ulong volume; // 現在の最終約定ボリューム
long time_msc; // 最後の価格更新時刻(ミリ秒単位)
uint flags; // ティックフラグ
double volume_real; // 高精度の現在の最終約定ボリュー
};
struct MqlBookInfo { ENUM_BOOK_TYPE type; // ENUM_BOOK_TYPE列挙体からの注文タイプ double price; // 価格 long volume; // ボリューム double volume_real; // 高精度ボリューム };
//+------------------------------------------------------------------+ //| デフォルトのパッキング | //+------------------------------------------------------------------+ struct A { char a; int b; }; //+------------------------------------------------------------------+ //| パッキングの指定 | //+------------------------------------------------------------------+ struct B pack(4) { char a; int b; }; //+------------------------------------------------------------------+ //| スクリプトプログラム開始関数 | //+------------------------------------------------------------------+ void OnStart() { Print("sizeof(A)=",sizeof(A)); Print("sizeof(B)=",sizeof(B)); } //+------------------------------------------------------------------+結論:
sizeof(A)=5 sizeof(B)=8構造体内のアラインメントについての詳細は、MSDNをご覧ください。
enum Main { PRICE_CLOSE_, PRICE_OPEN_ }; input Main Inp=PRICE_CLOSE; //+------------------------------------------------------------------+ //| 開始関数 | //+------------------------------------------------------------------+ void OnStart() { }コンパイラは下記の警告を表示します。
class X { }; void f(int) { } template<typename T> void a(T*) { new T(2); } // 以前はコンパイラがここでエラーを生成した template<typename T> void a() { f(0); } void OnInit() { a<X>(); }
ドキュメントを更新しました。
ドキュメントが更新されました。
ドキュメントが更新されました。
datetime iTime( string symbol, // 銘柄 ENUM_TIMEFRAMES timeframe, // 期間 int shift // シフト );
double iOpen( string symbol, // 銘柄 ENUM_TIMEFRAMES timeframe, // 期間 int shift // シフト );
double iHigh( string symbol, // 銘柄 ENUM_TIMEFRAMES timeframe, // 期間 int shift // シフト );
double iLow( string symbol, // 銘柄 ENUM_TIMEFRAMES timeframe, // 期間 int shift // シフト );
double iClose( string symbol, // 銘柄 ENUM_TIMEFRAMES timeframe, // 期間 int shift // シフト );
long iVolume( string symbol, // 銘柄 int timeframe, // 期間 int shift // シフト );
int iBars( string symbol, // 銘柄 ENUM_TIMEFRAMES timeframe // 期間 );
int iBarShift( string symbol, // 銘柄 ENUM_TIMEFRAMES timeframe, // 期間 datetime time, // 時間 bool exact=false // モード );
int iLowest( string symbol, // 銘柄 ENUM_TIMEFRAMES timeframe, // 期間 int type, // 時系列ID int count, // 要素数 int start // インデックス );
int iHighest( string symbol, // 銘柄 ENUM_TIMEFRAMES timeframe, // 期間 int type, // 時間series identifier int count, // 要素数 int start // インデックス );
long iRealVolume( string symbol, // 銘柄 ENUM_TIMEFRAMES timeframe, // 期間 int shift // シフト );
long iTickVolume( string symbol, // 銘柄 ENUM_TIMEFRAMES timeframe, // 期間 int shift // シフト );
long iSpread( string symbol, // 銘柄 ENUM_TIMEFRAMES timeframe, // 期間 int shift // シフト );
void TesterHideIndicators( bool hide // フラグ );
ドキュメントが更新されました。
クラッシュログで報告されたエラーを修正しました。
MetaTrader 5ビルド1745は、Microsoft Windows XP /2003/Vistaをサポートする最後のプラットフォームバージョンとなります。
当社は数ヶ月前に古いオペレーティングシステムサポートの終了(英語)を発表しました。Windows
2003、Windows Vista、特にMicrosoft Windows
XPは、古いオペレーティングシステムです。技術的な制限によってWindows
XPでの潜在的なハードウェア機能の実現が難しくなったため、マイクロソフトは3年前にこのオペレーティングシステムのサポートを終了しました。
MetaTrader 5ビルド1745およびそれ以前のバージョンは、上記のオペレーティングシステムで引き続き動作しますが、アップデートを受け取ることはできません。また、インストーラはこれらのオペレーティングシステムでは動作しなくなります。
MetaTrader 5を実行するために最低限必要なオペレーティングシステムのバージョンはWindows 7となりますが、Windows 10の64ビット版の使用が強く推奨されます。
旧バージョンのデスクトップおよびモバイル端末のサポートは、新しいプラットフォームバージョンのリリースによって終了します。
サポートされていない端末のビルドは、新しいサーバーバージョンに接続することはできません。事前に端末を更新することを強くお勧めします。
新しい共有プロジェクトをサポートするため、MQL5ストレージの運用プロトコルを更新しました。したがって、プラットフォームの更新後にはストレージからすべてのデータのチェックアウトを実行してください。更新中にMQL5ストレージに保存されたデータが失われたり影響を受けたりすることはありません。
プラットフォームを新しいバージョンに更新する前に、Commit操作を実行してすべてのローカル変更をMQL5ストレージに送信することをお勧めします。
仕組み
例えば ドルインデックス(USDX)を示す製品の作成が可能です。それには下記の数式が使われます。
50.14348112 * pow(ask(EURUSD),-0.576) * pow(USDJPY,0.136) * pow(ask(GBPUSD),-0.119) * pow(USDCAD,0.091) * pow(USDSEK,0.042) * pow(USDCHF,0.036)
注:元のドルインデックス式でUSDEURとUSDGBPのペアが使用されます。プラットフォームでは逆ペアのみが使用可能であるため、合成銘柄式は負のパワーと、ビッドの代わりにアスクが使用されます。
プラットフォームは、ブローカーによって提供された他の6銘柄のクオーツに基づいて、新しい製品の価格を実時間で計算します。価格の変更は[気配値表示]ウィンドウとチャートで視覚化されます。
int CustomTicksAdd( const string symbol, // Symbol name const MqlTick& ticks[] // カスタム銘柄に適用する必要があるティックデータを持つ配列 );CustomTicksAdd関数は、これらのクオーツがブローカーサーバから受信されたかのように提供することができます。データはティックデータベースに直接書き込まれるのではなく、[気配値表示]ウィンドウに送られます。ターミナルは次に、ティックを[気配値表示]からデータベースに保存します。1つの呼び出しで大量のデータが渡されると、リソースを節約するために関数の動作が変わります。256ティック以上送信された場合、データは2つの部分に分割されます。大きな部分はチックデータベースに直接記録されます(CustomTicksReplace同様)。最後の128ティックからなる第2の部分は[気配値表示]に送られ、そこからデータベースに保存されます。
MetaEditorでフル機能のプロジェクトを利用できるようになりました。プログラム開発プロセスがより便利になりました。
現在、メインMQ5プログラムファイルはプロジェクトとして表示されません。このプロジェクトは、プログラム設定、コンパイルパラメータ、および使用されているすべてのファイルに関する情報を格納する別個の
"MQPROJ"ファイルです。メインプロジェクト設定は別のダイアログボックスからアクセスできるため、ソースコードで#propertyで指定する必要はありません。
プロジェクト内の作業で便利なように、[ナビゲータ]で別のタブが用意されています。インクルード、リソース、ヘッダー、その他のファイルなどのすべてのファイルが、カテゴリに整理されています。すべてのファイルが自動的にプロジェクトナビゲータに追加されます。たとえば、新しくインクルードしたMQHファイルは、ナビゲータの[Dependencies](依存ファイル)セクションに自動的に表示されます。.
新規プロジェクトのサポートは、更新されたMQL5ストレージオンラインリポジトリにも実装されています。MQL5.comコミュニティの他のメンバーとのコラボレーションを通じた大規模なプロジェクトの開発がはるかに便利になりました。
グループプロジェクトには新しい共有プロジェクトセクションが用意されています。このセクションで作成されたプロジェクトはすぐにストレージに送信されるため、他のユーザーに権限を与えればすぐにコラボレーションを開始できます。
共有プロジェクトでプロジェクトをコンパイルすると、実行可能なEX5ファイルは、プログラムの種類に応じて自動的にローカルのエキスパート、指標またはスクリプトディレクトリにコピーされます。このため、手動でファイルをコピーすることなく、簡単にチャート上でプログラムを起動できます。
MQL5ストレージ操作の新機能
新しい共有プロジェクトのサポートを実装するために、MQL5ストレージ操作プロトコルを変更しました。したがって、プラットフォームの更新後にはストレージからすべてのデータのチェックアウトを実行してください。更新中にMQL5ストレージに保存されたデータが失われたり影響を受けたりすることはありません。
[Checkout from Storage](ストレージからチェックアウト)コマンドは使用できません。代わりに、[Activate MQL5 Storage](MQL5ストレージをアクティブ化)と [Update from Storage](ストレージからファイルを更新)コマンドを使用してデータを受け取ります。
新規プロジェクト:作成および操作の詳細の例
MetaEditorに新規プロジェクトエンティティが追加されました。プロジェクトとは、一般的なプログラムのプロパティと、使用されているすべてのファイルに関する情報を格納するmqprojファイルのことです。ソースコードで#propertyディレクティブを使用して手動で変更するのではなく、別のMetaEditorダイアログから便利にプログラムプロパティを管理できるようになりました。
利用可能なコードがあれば、 [ソースから新規プロジェクトを作成]コマンドを使って簡単に新しいプロジェクトをテストすることができます。
選択したファイルがあるディレクトリに、同じ名前とmqproj拡張子を持つ新しいプロジェクトファイルが作成されます。#propertyを介してソースコードで指定されたメインプログラムの名前、著作権、バージョン、開発者のサイトへのリンク、プログラムの説明などのプロパティは、プロジェクトに自動的に追加されます。
MQL5プログラムをコンパイルするための新しいオプションが2つ追加されました。
プロジェクトを操作するには、ナビゲータウィンドウで[プロジェクト]タブを使用します。このタブでは、プロジェクトで使用されるすべてのファイルが便利な形式で表示されます。プロジェクトがソースファイルから生成されると、使用されているすべてのインクルードファイル(メインのMQ5ファイルとインクルードファイルの#includeディレクトリを使用して指定)が自動的に[Dependencies](依存関係)セクションに追加されます。
ソースコードに追加された新しいインクルードファイルは、プロジェクトナビゲータにも表示されます。使用されたヘッダーファイルはヘッダーセクションに追加されます。 プロジェクトでリソースとして使用される画像、音声、および他のMQL5プログラムは[リソース]セクションに追加されます。ソースコードを含むMQ5ファイルは[ソース]セクションに表示されます。[設定とファイル]セクションでは、テスト用のファイルとチャートテンプレートなど、他のファイルを追加できます。
プロジェクトに既存のファイルを追加したり、そこからファイルを削除するには、コンテキストメニューコマンドを使用します。プロジェクトからファイルを削除する(バインディングを削除する)ことと、ハードディスクからファイルを完全に削除することが両方できるので、ファイルを削除するときは注意してください。
新規プロジェクトの作成は、通常のMQL5プログラムの作成と同じくらい簡単です。[新しいプロジェクト]をクリックし、新しいプログラムのタイプを選択し、MQL5ウィザードでプロパティ(名前、イベントハンドラなど)を指定します。
実行可能なEX5ファイルを作成するには、プロジェクトを開いてF7(コンパイルコマンド)を押すか、プログラムのメインMQ5ファイルを開いてコンパイルします。
MQL5ストレージでの共有プロジェクト:操作の詳細
共有プロジェクトは別の[共有プロジェクト]セクションから管理されます。まだストレージを接続していない場合は、目的のフォルダのコンテキストメニューから[Activate MQL5 Storage](MQL5ストレージをアクティブ化)コマンドを実行してください。MetaEditorは、ストレージに保存されたデータが含まれているかどうか、そして共有プロジェクトがあるかどうかを確認します。利用可能なすべてのデータがストレージから取得され、コンピュータにアップロードされます(チェックアウト操作)。 使用可能なグループプロジェクトが[共有プロジェクト]セクションに表示されます。プロジェクトを取得するには、コンテキストメニューの[Checkout from Storage](ストレージからチェックアウト)を実行します。
新しいグループプロジェクトを作成するには、[共有プロジェクト]フォルダを選択して[新しいプロジェクト]をクリックします。
次に、標準的なMQL5のステップを完了します。目的のプログラムのタイプ、名前、プロパティを設定します。グループプロジェクトの場合、他の参加者が簡単に見つけられるように、わかりやすくわかりやすい名前を使用する必要があります。 プロジェクト名にはスペースのないラテン文字のみ使用できます。
作成されたオブジェクトはすぐにMQL5ストレージに追加されます。プロジェクトで使用されている標準ライブラリファイルはストレージに追加されないので、手動で追加することができます。
他の参加者がプロジェクトで作業できるようにするには、そのプロパティを開きます。ここから、MQL5.communityログインを指定し、グループ作業の共通パラメータを設定することによって、選択したユーザに権限を与えることができます。
グループプロジェクトをコンパイルすると、実行可能なEX5ファイルは、プログラムの種類に応じて自動的にローカルのエキスパート、指標またはスクリプトディレクトリにコピーされるため、適切なディレクトリに手動でそれをコピーすることなく、すぐにターミナルでプログラムを実行することができます。
MQL5ストレージのパブリックプロジェクト:開発への参加
上記のように、MQL5ストレージの各グループプロジェクトには共有設定があり、プロジェクトはプライベートにすることも、他のユーザーに公開することもできます。これで、自由に参加できるすべてのプロジェクトが別の[パブリックプロジェクト]タブに表示されます。
誰もがエキサイティングなプロジェクトを見つけ、その開発に参加することができます。[Join](参加)をクリックし、ストレージからプロジェクトを受信するだけです。
//+------------------------------------------------------------------+ //| スクリプトプログラム開始関数 | //+------------------------------------------------------------------+ void OnStart() { //--- バイナリ配列としてのテンプレートファイル unsigned char my_template[]= { 0xFF,0xFE,0x3C, ... ,0x00 // この例のデータ配列は短くされている }; //--- 保存及びテンプレートの適用 if(FileSave("my_template.tpl",my_template)) { Print("Custom template saved in \\MQL5\\Files"); if(ChartApplyTemplate(0,"\\Files\\my_template.tpl")) Print("Custom template applied to the current chart"); else Print("Failed to apply custom template"); } else Print("Failed to save custom template"); }
関数 | アクション |
---|---|
CustomSymbolCreate | 指定されたグループに指定された名前を持つカスタム銘柄を作成する |
CustomSymbolDelete | 指定された名前を持つカスタム銘柄を削除する |
CustomSymbolSetInteger | カスタム銘柄の整数型プロパティ値を設定する |
CustomSymbolSetDouble | カスタム銘柄のreal型プロパティ値を設定する |
CustomSymbolSetString | カスタム銘柄の文字列型プロパティ値を設定する |
CustomSymbolSetMarginRate | 注文の種類と方向に応じてカスタム銘柄の証拠金率を設定する |
CustomSymbolSetSessionQuote | 指定した銘柄と曜日の指定されたクオーツセッションの開始時刻と終了時刻を設定する |
CustomSymbolSetSessionTrade | 指定した銘柄と曜日の指定された取引セッションの開始時刻と終了時刻を設定する |
CustomRatesDelete | 指定された時間間隔でカスタムシンボルの価格履歴からすべてのバーを削除する |
CustomRatesReplace | 指定された時間間隔内のカスタム銘柄の価格履歴を、MqlRates型配列のデータで完全に置き換える |
CustomRatesUpdate | カスタム銘柄履歴に不足しているバーを追加し、既存のデータをMqlRates型配列のものに置き換える |
CustomTicksAdd | MqlTick型の配列からカスタム銘柄の価格履歴にデータを追加する(カスタム銘柄は[気配値表示]ウィンドウで選択) |
CustomTicksDelete | 指定された時間間隔でカスタムシンボルの価格履歴からすべてのティックを削除する |
CustomTicksReplace | 指定された時間間隔内のカスタム銘柄の価格履歴を、MqlTick 型配列のデータで完全に置き換える |
ライブラリは、ターミナル作業ディレクトリのInclude\Genericフォルダにあります。
bool ArraySwap( void& array1[], // 1番目の配列 void& array2[] // 2番目の配列 );この関数は、同じ型および同じ次元の動的配列を受け入れます。多次元配列の場合、最初の次元を除くすべての次元の要素の数は一致する必要があります。
この新しいバージョンでは、取引実行モードで取引されている金融商品の市場統計を表示することができます。統計を表示するには、気配値表示で任意の銘柄のメニューを開いて「統計」を選択します。
「取引」タブでのポジション操作がより便利になりました。ポジションや注文をシングルタップすると、ポジション銘柄のチャートを開くだけでなく、ポジションボリュームを決済する、変更する、または増やすなどの詳細な情報と利用可能なアクションが表示されます。
Android用のMetaTrader5では、予備の口座を簡単に作成できます。 メニューから"ライブアカウントを開設"を選択し、サーバーのリストの中からブローカーを見つけてください。 IDの書類と銀行口座の明細の二つが必要です。 リクエストはブローカーに送信され、口座開設に必要な追加情報を求められます。
union LongDouble { long long_value; double double_value; };構造体とは異なり、さまざまなunionメンバは同じメモリ領域に属します。この例では、LongDoubleのunionは、long型とdouble型の値が同じメモリ領域を共有するように宣言されています。long_valueとdouble_value変数が(メモリ内で)重複しているので、構造体とは異なり、long型の値とdouble型の実数値を同時に格納することはできません。一方、MQL5プログラムは、unionからのデータをいつでも整数(long)または実数(double)として 処理することができるため、unionでは、同じデータシーケンスを表す2つ(またはそれ以上)のオプションを受け取ることができます。
union LongDouble { long long_value; double double_value; }; //+------------------------------------------------------------------+ //| スクリプトプログラム開始関数 | //+------------------------------------------------------------------+ void OnStart() { //--- LongDouble lb; //--- 無効な-nan(ind)番号を取得して表示する lb.double_value=MathArcsin(2.0); printf("1. double=%f integer=%I64X",lb.double_value,lb.long_value); //--- 正規化された最大値l(DBL_MAX) lb.long_value=0x7FEFFFFFFFFFFFFF; printf("2. double=%.16e integer=%I64X",lb.double_value,lb.long_value); //--- 正規化された最小正 (DBL_MIN) lb.long_value=0x0010000000000000; printf("3. double=%.16e integer=%.16I64X",lb.double_value,lb.long_value); } /* 実行結果 1. double=-nan(ind) integer=FFF8000000000000 2. double=1.7976931348623157e+308 integer=7FEFFFFFFFFFFFFF 3. double=2.2250738585072014e-308 integer=0010000000000000 */
class Foo { int value; public: string Description(void){return IntegerToString(value);}; //--- デフォルトコンストラクタ Foo(void){value=-1;}; //--- パラメータ付きのコンストラクタ Foo(int v){value=v;}; }; //+------------------------------------------------------------------+ //| Foo型オブジェクトを持つ構造体 | //+------------------------------------------------------------------+ struct MyStruct { string s; Foo foo; }; //+------------------------------------------------------------------+ //| スクリプトプログラム開始関数 | //+------------------------------------------------------------------+ void OnStart() { //--- MyStruct a,b; Foo an_foo(5); a.s="test"; a.foo=an_foo; Print("a.s=",a.s," a.foo.Description()=",a.foo.Description()); Print("b.s=",b.s," b.foo.Description()=",b.foo.Description()); //--- Print("b=a"); b=a; //--- Print("a.s=",a.s," a.foo.Description()=",a.foo.Description()); Print("b.s=",b.s," b.foo.Description()=",b.foo.Description()); /* Execution result; a.s=test a.foo.Description()=5 b.s= b.foo.Description()=-1 b=a a.s=test a.foo.Description()=5 b.s=test b.foo.Description()=5 */ }オブジェクトメンバ単位のコピーは暗黙の演算子で実行されます。
ENUM_POSITION_REASON | ENUM_DEAL_REASON | ENUM_ORDER_REASON | 理由の詳細 |
---|---|---|---|
POSITION_REASON_CLIENT | DEAL_REASON_CLIENT | ORDER_REASON_CLIENT | この操作は、デスクトップターミナルから出された注文がアクティブ化された結果として実行されました。 |
POSITION_REASON_MOBILE | DEAL_REASON_MOBILE | ORDER_REASON_MOBILE | この操作は、モバイルアプリケーションから出された注文がアクティブ化された結果として実行されました。 |
POSITION_REASON_WEB | DEAL_REASON_WEB | ORDER_REASON_WEB | この操作は、Webプラットフォームから出された注文がアクティブ化された結果として実行されました。 |
POSITION_REASON_EXPERT | DEAL_REASON_EXPERT | ORDER_REASON_EXPERT | この操作は、MQL5プログラム(エキスパートアドバイザーまたはスクリプト)から出された注文がアクティブ化された結果として実行されました。 |
- | DEAL_REASON_SL | ORDER_REASON_SL | この操作は、ストップロスのアクティブ化の結果として実行されました。 |
- | DEAL_REASON_TP | ORDER_REASON_TP | この操作は、テイクプロフィットのアクティブ化の結果として実行されました。 |
- | DEAL_REASON_SO | ORDER_REASON_SO | この操作は、ストップアウトイベントの結果として実行されました。 |
- | DEAL_REASON_ROLLOVER | - | この約定は、ロールオーバのために実行されました。 |
- | DEAL_REASON_VMARGIN | - | この約定は、変動証拠金を課金した後に実行されました。 |
- | DEAL_REASON_SPLIT | - | この約定は、スプリットが公表された時にポジションが存在した株式または他の資産のスプリット(低下)の後に実行されました。 |
iOS版 MetaTrader 5 ビルド1605では仮取引口座を簡単に開設することが可能です。口座を新規開設するには、メニューから「リアル口座を開く」を選択し、ブローカーをサーバーのリストから探し、個人情報を記入して身元と住所を確認するための2つの書類を添付して送信します。ブローカーはリアル口座を開設して必要に応じて追加情報を要求します。
この新バージョンのもう一つの特徴は、最適化され再設計された電子メールセクションです。
ドキュメントを更新しました。
Android版 MetaTrader
5は取引履歴をポジションの形で表示することができるようになりました。履歴タブには今までには注文と約定のみが表示されていましたが、取引がポジションの形で分析できるようになりました。1つのポジションの全ての取引データが1つのレコードに結合されて、下記が表示されます。
このビルドで一番革新的なのは、ポジションの形での取引履歴の表示です。履歴タブには今までには注文と約定のみが表示されていましたが、これにポジションが加わりました。取引プラットフォームは、ポジションの取引データを収集し、そのデータを1つのレコードに結合します。レコードには以下が含まれます。
//+------------------------------------------------------------------+ //| テンプレート関数 | //+------------------------------------------------------------------+ template<typename T1,typename T2> string Assign(T1 &var1,T2 var2) { var1=(T1)var2; return(__FUNCSIG__); } //+------------------------------------------------------------------+ //| bool+stringのための特別のオーバーロード | //+------------------------------------------------------------------+ string Assign(bool &var1,string var2) { var1=(StringCompare(var2,"true",false) || StringToInteger(var2)!=0); return(__FUNCSIG__); } //+------------------------------------------------------------------+ //| スクリプトプログラム開始関数 | //+------------------------------------------------------------------+ void OnStart() { int i; bool b; Print(Assign(i,"test")); Print(Assign(b,"test")); }コード実行の結果、Assign()テンプレート関数はint+stringのペアで使用され、オーバーロードされたバージョンは2回目の呼び出しでbool+stringペアですでに使用されていることがわかります。
string Assign<int,string>(int&,string) string Assign(bool&,string)
template<typename T> T Func() { return (T)0; } void OnInit() { Func<double>(); // 明示的テンプレート関数の特殊化 }したがって、型定義は、呼び出しパラメータを使用するのではなく、型の明示的な指定によって実行されます。
ドキュメントを更新しました。
ドキュメントを更新しました。
#resource path_to_resource_file as type_of_resource_variable name_of_resource_variable
#resource "data.bin" as int ExtData[] // data.binファイルのデータを含む数値配列の宣言 #resource "data.bin" as MqlRates ExtData[] // data.binファイルのデータを含む単純構造配列の宣言 #resource "data.txt" as string ExtCode // data.txtファイルのデータを含む文字列の宣言 #resource "data.txt" as string ExtCode[] // data.txtファイルのデータを含む文字列の宣言 #resource "image.bmp" as bitmap ExtBitmap[] // BMPファイルからのビットマップを含む1次元配列の宣言、array size = width * height #resource "image.bmp" as bitmap ExtBitmap2[][] // BMPファイルからビットマップを含む2次元配列を宣言する、array size [hight][width]
ドキュメントを更新しました。
string str; ... if(str) // 「Cannot convert type 'string' to 'bool(string型はboolに変換できません)」コンパイルエラーが発生する(以前のバージョンではエラーは表示されない) Print("str is true");明示的な条件の使用が必要です。
string str; ... //--- 文字列が初期化されているかを確認する if(str!=NULL) Print("str is true"); または //--- 文字列の値が「true」かどうかを確認する if(StringCompare(str,"true",false)) Print("str is true"); または //--- 文字列が整数でゼロと等しいかどうかを確認する「true」かどうかを確認する if((int)str!=0) Print("str is true");