インポートした関数の呼び出し【Imported functions call】

To import functions during execution of an mql4 program, the so-called late binding is used. This means that, until the imported function is called, the corresponding module (ex4 or dll) will not be loaded. MQL4 and DLL libraries are executed in the calling module thread.

MQL4 プログラムの実行中に関数をインポートするために、いわゆる遅延バインディングが使用されます。これは、インポートされた関数が呼び出されるまでは、対応するモジュール(ex4 または DLL)が読み込まれないことを意味します。MQL4 と DLL ライブラリは、呼び出し元ののモジュールのスレッドで実行されます。

It is not recommended to use a fully qualified name of the module to be loaded like Drive:\Directory\FileName.Ext. MQL4 libraries are loaded from the terminal_dir\experts\libraries folder. If the library has not been found, there will be made an attempt to load the library from the terminal_dir\experts folder.

\Directory\FileName.Ext のように読み込まれるモジュールの完全修飾名を使用することは推奨できません。MQL4 ライブラリは terminal_dir\experts\libraries フォルダから読み込まれます。ライブラリが見つからない場合は、terminal_dir\experts フォルダから、ライブラリの読み込みを試みます。

System libraries (DLLs) are loaded by the rules of the operation system. If the library has already been loaded (by another expert, for example, or from another client terminal launched at the same time), the library already loaded will be referenced to. Otherwise, the searching will be preformed in the following order:

システム ライブラリ(DLL)は、オペレーティング システムの規則によって読み込まれます。もし、ライブラリが既に(別のエキスパート、例えば、同時に起動した、別のクライアント ターミナルによって)読み込まれている場合は、すでに読み込まれたライブラリが参照されます。それ以外の場合、検索は次の順序で実施されます。

  1. The terminal_dir\experts\libraries directory.

    The terminal_dir\experts\libraries のディレクトリ

  2. The directory from which the terminal_dir client terminal was launched.

    クライアント ターミナルが起動した terminal_dir ディレクトリ

  3. The current directory.

    現在のディレクトリ

  4. The system directory of windows_dir\SYSTEM32 (or windows_dir\SYSTEM for Win98).

    windows_dir\SYSTEM32(またはWin98のwindows_dir\SYSTEM)のシステム ディレクトリ

  5. The directory where windows_dir operation system was installed.

    オペレーティング システムがインストールされた windows_dir ディレクトリ

  6. Directories listed in the PATH environment system variable.

    PATH 環境システム変数に設定されているディレクトリ

If a DLL uses another DLL in its work, the former one will not be loaded if the latter one is unavailable.

もし DLL がその動作中にもう1つの DLL を使うなら、後者のものが使用できない場合、以前のものも読み込まれません。

Unlike system libraires, custom libraries (MQL4) are loaded for every calling module separately, independently on whether the called library has been loaded by any other module. For example, the caller.ex4 module calls functions from lib1.ex4 and lib2.ex4 libraries. The lib1.ex4 library, in its turn, calls functions from the lib2.ex4 library. In this case, one more copy of the lib1.ex4 library and two copies of the lib2.ex4 library will be loaded, regardless that all calls come from the same caller.ex4 module.

システム ライブラリと異なり、カスタム ライブラリ(MQL4)は各呼び出し元のモジュールを個別に読み込み、他のモジュールで読み込まれたライブラリであっても独立して読み込みます。たとえば、caller.ex4 モジュールは lib1.ex4 および lib2.ex4 のライブラリから関数を呼び出します。lib1.ex4 ライブラリは、そのターンで lib2.ex4 ライブラリから関数を呼び出します。この場合、もう1つの lib1.ex4 ライブラリのコピーと、2つの lib2.ex4 ライブラリのコピーが読み込まれ、いずれにしても、すべての呼び出しは同じ caller.ex4 から派生します。

Functions imported from DLL into an mql4 program must provide linkage convention accepted for Windows API functions. To provide such a convention, the key word __stdcall specific for compilers of Microsoft(r) company is used in the source codes of programs written in C or C++ language. The above linkage convention is characterized by the following:

DLL から MQL4 プログラムに読み込まれた関数は、Windows API 関数に容認されたリンケージ規約を備える必要があります。このような規約を備えるには、Micorsoft(R)社のコンパイラで C または C++ の言語で記述されたプログラムの ソース コードで使用される特定のキーワード _ _stdcall を使用します。上記のリンケージ規約は次のように特徴づけられます。

  • – calling function (in our case, it is an mql4 program) must “see” the called (imported from DLL) function prototype in order to put parameters onto the stack in a proper way;

    呼び出しをしている関数(この場合、MQL4 プログラム)は、適切な方法でストックにパラメータを設定する指示のために、呼び出された(DLLからインポートされた)関数プロトタイプを「見なくて」はならない。

  • – calling function (in our case, it is an mql4 program) puts parameters onto the stack in the reversed order, i.e., from right to left; it is this order in which the imported function reads parameters passed to it;

    呼び出しをしている関数(この場合、MQL4 プログラム)は、スタックに逆順の指示でパラメータを設定します。すなわち、右から左へ。それは、インポートされた関数がそれに渡されたパラメータを読む指示です。

  • -parameters are passed by their values, except for those explicitely passed by a link (in our case, these are lines);

    パラメータは、リンクによって明確に渡されたそれら(この場合、これらは行です)以外は、それらの値によって渡されます。

  • – on reading the parameters passed to it, the imported function will flush the stack by itself.

    渡されたパラメータを読み込むとき、インポートされた関数のスタック自体がフラッシュされます。

At describing of the imported function prototype, it is useless to use parameters with default values as all parameters must be passed explicitely to the imported function.

インポートされた関数プロトタイプを記述することにおいて、すべてのパラメータを明確にインポートした関数に渡す必要があるとき、規定値でパラメータを使うことは役に立ちません。

If the call for an imported function failed (expert settings do not allow DLL imports, or the corresponding library could not be loaded for any reason), the expert stops working putting the corresponding message into the “expert stopped” journal. At that, the expert will not be launched until it is re-initialized. An expert can be re-initialized as a result of recompiling or opening of the expert properties table and pressing of OK button.

もし、インポート関数の呼び出しが失敗した(エキスパートの設定が DLL の読み込みを許さないか、あるいは、対応するライブラリが、なんらかの理由で読み込むことができなった)場合、エキスパートは “expert stopped” ジャーナルに該当するメッセージを出して、処理を終了します。さらに、エキスパートは再初期化されるまで、起動されません。エキスパートは、再コンパイルを決定したとき、もしくは、エキスパートのプロパティ一覧を開いた先の OK ボタンを押したときに、再初期化することができます。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA


You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">