MQL4の新しい構文 - ページ 4 123456 新しいコメント Ex Ovo Omnia 2014.01.26 13:37 #31 その通りです。よほどのことがない限り、私のコードにはbool, int, double, stringしか出てきません。そうでなければ、このインデックスに近づくすべての整数をキャストする必要があります。 Ian Venner 2014.01.26 15:45 #32 RaptorUK: uchar - 符号なし文字、なぜこれをループに使うのでしょうか? 私には意味がわかりません。 あなたはulongsを扱うことになります、それは新しいdatetimeがそうであるように・・・そして将来あなたがそれを考えずにタイプキャストしたとき、あなたは警告を受けるでしょう・・・警告に対処するか、それを無視するか。 しかし、ただベストを望むだけでなく、あなたが今しているように、学び、理解することです。 あなたがstackoverflowから投稿したものは、私には意味があります、私はそれが良いアドバイスだと思います。 ucharは0から255までの8ビットの正の値なので、0から100までのループでは、32ビットの整数の代わりに8ビットのucharを使うことができますよ。 Simon Gniadkowski 2014.01.26 16:01 #33 SDC: ucharは0から255までの1バイトの正の値なので、0から100までのループには1バイトのucharを使用することができます。 しかし、なぜそんなことをするのでしょうか? それは動作しますが、なぜ文字値用の変数型をループカウンターに使うことが論理的に正しいのでしょうか? もし、関数から 返された値を保存する必要があり、その関数がucharを返す場合、uchar変数を使用して返された値を保存してください ... オリジナルのmql4ではこれは問題ではありませんでしたが、新しいmql4ではより問題になるでしょう。 Ian Venner 2014.01.26 16:16 #34 この質問をしたとき、私はなぜそうしたいのかわかりませんでした。 8ビットの変数型が32ビットより速く処理できるのか、遅いのか、同じなのか、8ビットの値がより少ないRAMやディスクスペースを使用するのか、わかりませんでした。 私は、32ビットOSが4つの8ビット値を同時に処理できると思っていたのですが、そうではありませんでした。どうやらそうではないらしい。これで、64ビットOSが32ビットよりも高速でない理由がわかりました。より多くのRAMにアクセスできるという事実を除けば、です。私はこのことをよく不思議に思っていました。 Ex Ovo Omnia 2014.02.08 06:31 #35 私は、解決策が見つからない質問があります。 どのようにvoid&を 使用するのですか?つまり、私はDLLに任意のポインタを送信する必要がある場合。ヘルプファイルには、このvoid型を使用する関数が ありますが、ソースのどこかに配置すると、それはコンパイルされません。テンプレートで回避しようとしましたが、#import文の中でテンプレートは禁止されています。 単一型のコンストラクションは何とかなったのですが、void&の配列ポインタをDLLに渡すには、明示的に型を指定しないと実装できないようです。 int FileReadArray( int file_handle, // File handle void& array[], // Array to record int start=0, // start array position to write int count=WHOLE_ARRAY // count to read ); Ex Ovo Omnia 2014.02.09 09:02 #36 DLLに構造体の配列を渡す場合、何か制限があるのでしょうか? MT4Structure が単純な構造体 であるとします 。 kernel32.dllをインポート したところ、単一の構造体であれば問題なく動作します。 bool ReadFile( /*_In_ HANDLE*/ int hFile, /*_Out_ LPVOID*/ MT4Structure& lpBuffer, /*_In_ DWORD*/ uint nNumberOfBytesToRead, /*_Out_opt_ LPDWORD*/ uint& lpNumberOfBytesRead[], /*_Inout_opt_ LPOVERLAPPED*/int lpOverlapped ); しかし、構造体の配列を渡すとうまくいきません。この宣言のパラメータとして MT4Structure&[] を送ると、コンパイラがコンパイルしてくれません。 bool ReadFile(int, MT4Structure&[], uint, uint&[],int); gchrmt4 2014.02.09 09:45 #37 Ovo: DLLに構造体の配列を渡す場合、何か制限があるのでしょうか?このようなもので問題があるとは思えません。 struct TestStruct { int Integer; uchar Byte; double Real; }; #import "ExampleDllWhichReceivesStructureArray.dll" void Test(TestStruct &[]); #import MT4とDLLで異なるデフォルトの構造体アライメントを許容する場合)期待通りに動作します。 (ちなみに、MQL4のboolの内部表現がどうなっているかはわかりませんが、私はWin32関数は intを返すと宣言した方が良いと思っています。Win32関数はC++のboolではなく、BOOLを返します。BOOLは4バイトの整数を表すWindowsのマクロで、その値は1/0ですが、C++のboolは1バイトです。関数が実際には4バイトを返すのに、MT4に1バイトの戻り値を期待するように指示した場合、非常に低い確率ですが、スタック破壊に至る可能性があります)。 gchrmt4 2014.02.09 09:49 #38 Ovo:void&の 使い方は?つまり、DLLに任意のポインタを送る必要がある場合です。 質問の意味がよくわからないのですが。例えば、Win32 APIのドキュメントでは、void*を「これはあらゆるタイプのポインタを受け付ける。Win32の関数は、あなたのメモリブロックが何であるかを気にしない」という意味で使っています。 Ex Ovo Omnia 2014.02.09 10:01 #39 gchrmt4:質問の意味がよくわからないのですが。例えば、Win32 APIのドキュメントでは、void*を「これはあらゆるタイプのポインタを受け入れる。Win32の関数は、あなたのメモリブロックが何であるかを気にしない」という意味で使っています。 その通りです。しかし、MQL4ではそれがなかなかできないようで、#importブロックの中でテンプレートを使うことはできません。つまり、winapiで追加の構造を 使用すると、新しい型が必要になるたびに#import宣言を手動で更新することになります。私の目的は、インポートを一箇所で管理することなので、これは私にとってかなり不都合なことです。 gchrmt4 2014.02.09 10:05 #40 Ovo: その通りです。しかし、MQL4ではそれがなかなかできないようで、#importブロックの中でテンプレートを使うことができません。そのため、winapiで追加の構造を使用すると、新しい型が必要になるたびに#import宣言を手動で更新することになります。これは、私にとってはかなり不愉快なことです。 まだ理解できていませんが...。MQL4のimport はvoid*と宣言することはできないと思います。インポートで特定のデータ型を使う必要があり、そのデータ型ではDLLインポートしか使えません。もし、同じDLL関数を異なるデータ型で使いたい場合は、https://www.mql5.com/en/forum/148934 のような回避策がない限り、問題が発生します。 123456 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
uchar - 符号なし文字、なぜこれをループに使うのでしょうか? 私には意味がわかりません。 あなたはulongsを扱うことになります、それは新しいdatetimeがそうであるように・・・そして将来あなたがそれを考えずにタイプキャストしたとき、あなたは警告を受けるでしょう・・・警告に対処するか、それを無視するか。 しかし、ただベストを望むだけでなく、あなたが今しているように、学び、理解することです。
あなたがstackoverflowから投稿したものは、私には意味があります、私はそれが良いアドバイスだと思います。
ucharは0から255までの1バイトの正の値なので、0から100までのループには1バイトのucharを使用することができます。
もし、関数から 返された値を保存する必要があり、その関数がucharを返す場合、uchar変数を使用して返された値を保存してください ... オリジナルのmql4ではこれは問題ではありませんでしたが、新しいmql4ではより問題になるでしょう。
この質問をしたとき、私はなぜそうしたいのかわかりませんでした。
8ビットの変数型が32ビットより速く処理できるのか、遅いのか、同じなのか、8ビットの値がより少ないRAMやディスクスペースを使用するのか、わかりませんでした。
私は、32ビットOSが4つの8ビット値を同時に処理できると思っていたのですが、そうではありませんでした。どうやらそうではないらしい。これで、64ビットOSが32ビットよりも高速でない理由がわかりました。より多くのRAMにアクセスできるという事実を除けば、です。私はこのことをよく不思議に思っていました。
私は、解決策が見つからない質問があります。
どのようにvoid&を 使用するのですか?つまり、私はDLLに任意のポインタを送信する必要がある場合。ヘルプファイルには、このvoid型を使用する関数が ありますが、ソースのどこかに配置すると、それはコンパイルされません。テンプレートで回避しようとしましたが、#import文の中でテンプレートは禁止されています。
単一型のコンストラクションは何とかなったのですが、void&の配列ポインタをDLLに渡すには、明示的に型を指定しないと実装できないようです。
DLLに構造体の配列を渡す場合、何か制限があるのでしょうか?
MT4Structure が単純な構造体 であるとします 。
kernel32.dllをインポート したところ、単一の構造体であれば問題なく動作します。
しかし、構造体の配列を渡すとうまくいきません。この宣言のパラメータとして MT4Structure&[] を送ると、コンパイラがコンパイルしてくれません。
DLLに構造体の配列を渡す場合、何か制限があるのでしょうか?
このようなもので問題があるとは思えません。
MT4とDLLで異なるデフォルトの構造体アライメントを許容する場合)期待通りに動作します。
(ちなみに、MQL4のboolの内部表現がどうなっているかはわかりませんが、私はWin32関数は intを返すと宣言した方が良いと思っています。Win32関数はC++のboolではなく、BOOLを返します。BOOLは4バイトの整数を表すWindowsのマクロで、その値は1/0ですが、C++のboolは1バイトです。関数が実際には4バイトを返すのに、MT4に1バイトの戻り値を期待するように指示した場合、非常に低い確率ですが、スタック破壊に至る可能性があります)。
void&の 使い方は?つまり、DLLに任意のポインタを送る必要がある場合です。
質問の意味がよくわからないのですが。例えば、Win32 APIのドキュメントでは、void*を「これはあらゆるタイプのポインタを受け付ける。Win32の関数は、あなたのメモリブロックが何であるかを気にしない」という意味で使っています。
質問の意味がよくわからないのですが。例えば、Win32 APIのドキュメントでは、void*を「これはあらゆるタイプのポインタを受け入れる。Win32の関数は、あなたのメモリブロックが何であるかを気にしない」という意味で使っています。
その通りです。しかし、MQL4ではそれがなかなかできないようで、#importブロックの中でテンプレートを使うことはできません。つまり、winapiで追加の構造を 使用すると、新しい型が必要になるたびに#import宣言を手動で更新することになります。私の目的は、インポートを一箇所で管理することなので、これは私にとってかなり不都合なことです。
その通りです。しかし、MQL4ではそれがなかなかできないようで、#importブロックの中でテンプレートを使うことができません。そのため、winapiで追加の構造を使用すると、新しい型が必要になるたびに#import宣言を手動で更新することになります。これは、私にとってはかなり不愉快なことです。