MT4: dll インポート エラーをキャッチ
Results 1 to 9 of 9

Thread: MT4: dll インポート エラーをキャッチ

  1. #1
    こんにちは、

    ちょっとした質問です。たぶん、あなたの 1 人が知っているでしょう。

    mqh ヘッダー ファイルに次のようなものがあるとします。

    PHP コード: <code><span style=”color: #000000”> <span style=”color: #0000BB”></span><span style=”color: #FF8000”>#import”xxx.dll”
    </span><span style=”color: #0000BB”>voidyyy</span><span style=”color: #007700”>();
    </span><span style= ”color: #FF8000”>#import
    </span><span style=”color: #0000BB”></span> </span> </code> と xxx.dll が見つかりませんログにエラーが表示されます:

    ライブラリ 'xxx.dll' を読み込めません (エラー 126)

    このようなエラーをログ ファイルに書き込むだけでなく、Alert または MessageBox を使用して表示する簡単な方法は誰でも知っています。


    ありがとう

  2. #2
    EA Indior のデモ アカウントで同じ問題が発生しています。専門家に確認すると、xxxx .dll (126) をロードできないというエラーが表示されます。少額の料金でこれを修正できると思う人はいますか?ファイルはmql4ですがdllではないため、EA Indiorのソースコードにアクセスできます。

  3. #3

    Quote Originally Posted by ;
    とにかくEAが完了したときにすべてのDllハンドルを解放するためにMT4に頼ることはできないことを指摘しなければなりませんが
    このバグは、egy テスターで EA を実行している場合にのみ発生します。そこでは、egy テストの終了後に #import でロードされた dll を FreeLibrary() に忘れています。テスターを実行するたびに、参照カウントが 1 ずつ増加します。 deinit() で IsTesting() を使用し、手動で FreeLibrary() をもう一度回避することで、これを回避できる可能性があります。通常の操作中 (ライブ チャート上) では、(#import を使用して) 正しくロードされたものを常に解放します。上記はすべて #import のみを参照しています。コードに追加の LoadLibrary() がある場合は、もちろん、同じ量の FreeLibrary() を呼び出す必要があります。

  4. #4
    どうもありがとう: 私はこれを試してみます.

  5. #5
    どっ!
    もちろん、IsDllsAllowed() 関数はその小さな問題をカバーします!

  6. #6
    問題なし。 [DLL の呼び出しを許可する] ボックスがオフになっているとどうなるかわかりません。 LoadLibrary() を呼び出すと、DLL ファイルが存在する場合でも 0 が返されると思います。この場合、WinAPI 関数 FileOpen() または FindFirst() を使用して、DLL ファイルが存在するかどうかを確認できます。2 つのケースのいずれかを「警告」することができます: 1) DLL は存在しますが、開くことができません - 提案[DLL を許可する] がオフになっている 2) DLL ファイルが見つかりません。

  7. #7
    あなた自身の小さな仕事なしではありません... Kernel32.dllにあるLoadLibrary FreeLibraryを試してください。Init() int hmod = LoadLibrary(c:MT4LibraryDirxxx.dll); if (hmod != 0 ) FreeLibrary(hmod); else Alert(xxx.DLL を読み込めません); MT4 は既に DLL をロードしており、Windows はアプリケーション インスタンスによって DLL がロードされた回数のカウンターを保持しているため、DLL のロードを解放する必要があることに注意してください。 loadlibrary への呼び出しを解放しないと、MT4 は EA の終了時に DLL を解放しません。いずれにせよ、EA が完了したときにすべての Dll ハンドルを解放するために MT4 に依存することはできないことを指摘しなければなりませんが、少なくともすべきことを行う必要があります!もちろん、これは DLL ファイルが存在し、それが有効な DLL であることを保証するだけで、インポート ステートメントで定義された関数が実際に存在することを保証するものではありません。そのためには、関数 GetProcAddress() を使用する必要があります。ここの MSDN ドキュメントを参照してください。
    http://msdn.microsoft.com/en-us/libr...(v=VS.85).aspx

  8. #8

    Quote Originally Posted by ;
    あなた自身の小さな仕事なしではありません... Kernel32.dllにあるLoadLibrary FreeLibraryを試してください。Init() int hmod = LoadLibrary(c:MT4LibraryDirxxx.dll); if (hmod != 0 ) FreeLibrary(hmod); else Alert(xxx.DLL を読み込めません); MT4 は既に DLL をロードしており、Windows はアプリケーション インスタンスによって DLL がロードされた回数のカウンターを保持しているため、DLL のロードを解放する必要があることに注意してください。 loadlibrary への呼び出しを解放しないと、MT4 は次の場合に DLL を解放しません...
    ありがとうレンジバウンド!

  9. #9

    Quote Originally Posted by ;
    EA Indior のデモ アカウントで同じ問題が発生しています。専門家に確認すると、xxxx .dll (126) をロードできないというエラーが表示されます。少額の料金でこれを修正できると思う人はいますか?ファイルはmql4ですがdllではないため、EA Indiorのソースコードにアクセスできます。
    私はそれを修正した経験があり、あなたに連絡先を教えてもらいます.

投稿権限

  • Youma新しいスレッドを投稿しない
  • Youmaは返信しない
  • あなたは添付ファイルを投稿しないかもしれない
  • Youma Notedityourposts
  •  
  • スマイリーはオンです
  • スマイリーはオンです
  • [IMG]コードがオンです
  • [VIDEO]コードがオンです
  • HTMLコードがオフです
This website uses cookies
We use cookies to store session information to facilitate remembering your login information, to allow you to save website preferences, to personalise content and ads, to provide social media features and to analyse our traffic. We also share information about your use of our site with our social media, advertising and analytics partners.