DLLをアンロードする方法 - ページ 2

 
OneDepo >> :

WinAPIにはUnloadLibrary()はなく、FreeLibrary()があります。

その通りです :-)。私のMSDNはなぜか読み込まれませんでした :-)。

.

OneDepo>>:

OSは、ロードカウンターの値がゼロのときのみ、任意のDLLをアンロードします。

この場合、dllkuを読み込むアプリケーションはmetatraderのみです。

 
jartmailru >> :

この場合、dllkuを読み込むアプリケーションはMetatraderのみです。

そんなことより、アプリが10個でもいいんです。カウンターで遊ぶことです。もし、本当に、本当にDLLを解除したいのであれば、カウンターをゼロにリセットしてみてください。 トピックスターターへのアイデア ;)
 
njel >> :

importで外部ライブラリを使用する。


IDnikatorをアンロードしても、ターミナルにDLLが残っています。

エラーなしでDLLを書き込む。通常、DLLは不測の事態がない限り、勝手にアンロードされます。


ハッカー的な手法を除けば、これしかないでしょう。

 
Windowsは任意のDLLをキャッシュします。たくさんキャッシュしてくれます。
 
HideYourRichess >> :

エラーなしでDLLを書き込む。通常、不測の事態が発生しない限り、DLLは自らアンロードします。

さて、私の愛する人。

私は最新のDllを手に入れ、真剣にあなたの間違いを証明することにしました:-)。

調べてみると、スクリプトを終了した後、インジケータを終了した後と同じように

(ウィンドウを閉じるか、インジケータを削除することで)Dllがアンロードされる...。

リテラシー」については...DllMainは常に愚かにもTRUEを返します。

しかし、1年ほど前にDllを交換するためにMetatraderを終了させなければならなかったことを思い出します。

OS=WinXP・SP3、MT=225

 

お前ら気持ち悪いというかなんというかアンロードされない、そのような問題は数回しかなく、それはいつもコードのエラーによるものでした。これが最初の1枚です。2つ目です。マイクロソフトが暗黙のロード/アンロードのメカニズムを発明したのは、特にDllの取り扱いを簡素化するためであることを思い出してください。


このような奇妙な問題がどこから出てくるのか、理解することを拒否します。


はい、それと、私個人はDllMainを、直接は使っていません。

 
HideYourRichess >> :

お前ら気持ち悪いというかなんというか何かがアンロードされないというような問題は数回しかなく、それはいつもコードのエラーによるものでした。


このような奇妙な問題がどこから出てくるのか、理解することを拒否します。


また、個人的にはDllMainを直接使用することはありません。

以下は、MSDNからの引用です。
"システムがDLL_PROCESS_ATTACH以外の値でDllMain関数を呼び出した場合、その戻り値は無視されます。"

つまり、Dll-inをアンロードするとき、システムはあなたがそこでプログラマーとしてどう考えているかは絶対に気にしないのです。

正しく書くことも、間違って書くこともできない。自分がその中にいなければ、それはただ出てくるだけだ。可能であれば

.

でも、自分がプロだと思っているのだから、初心者にツッコミを入れるのではなく、アドバイスができるのでは......。

中身のないことを書いているように見えるが......プロジェクトからはダイナミックリンクを削除してくれ。

ランタイムパッケージに依存する場合、リンクされたDllを注意深く扱う必要があります-もちろん、そこで使われることはまずありません。

はもちろん、COMサブシステムで動作し、OleInitializeのような単一のコールが

数十のシステムDLLこれらの依存関係は一度にロードされるため...スタートアップなら簡単です。

しかし、初期化を行うと、例えば、DllとMetatraderの両方が同じシステムライブラリをフックする場合

OSの裏側は誰にもわからない......。

.

私たちは、.h / .libとライブラリの読み込みを通して、すべてのDllの機能をフックするAPIユーザーです。

アプリケーションの初期化時に発生する可能性が高く、私たちにできることは何もありません。

あるいは、すべてのライブラリを自前でロードし、すべての関数を手作業でダイナミックにリンクすることになる。

一方、素の数学、あるいはいくつかのAPI関数については、すべてがうまくいくはずです。


AlexEro>>:
WindowsはあらゆるDLLをキャッシュします。非常に強力なキャッシュです。

以上のことから、かなり現実に近いことが判明しました。つまり、DLL-ineが依存関係をフックアップする場合 -。

そして、OSは、このDLLをロードしたアプリケーションをロードしない限り、これをアンロードすることができません。

 
jartmailru >> :

以下は、MSDNからの引用です。
"システムがDLL_PROCESS_ATTACH以外の値でDllMain関数を呼び出した場合、その戻り値は無視されます。"

つまり、Dll-inをアンロードしても、そこでプログラマーとしての自分がどう思おうが、システムは全く関知しないのです。

正しいか正しくないかは書けない。自分がその中にいなければ、そのまま出てきてしまう。可能であれば


もう一度言いますが、特に才能のある人の場合、DLLがエラーなく書かれていれば、すべてそのとおりに動作するはずです。レイトリンクで読み込まれたライブラリをアンロードする特別な仕組みはありません。クリアですか!?MQL4は、LoadFreeLibraryを使用して明示的にDllをロード/アンロードすることに関連するサービスを提供しません。同様に、Terminateへのアクセスもありません。

jartmailru>>:

しかし、あなたは自分をプロだと思っているので、初心者にはツッコミを入れるのではなく、アドバイスができるのではないでしょうか?

中身のないことを書いているように見えるが......プロジェクトからはダイナミックリンクを削除してくれ。

ランタイムパッケージに依存する場合、リンクされたDllを注意深く扱う必要があります-もちろん、そこで使われることはまずありません。

はもちろん、COMサブシステムで動作し、OleInitializeのような単一のコールが

数十のシステムDLLこれらの依存関係は一度にロードされるため...スタートアップなら簡単です。

しかし、初期化を行うと、例えば、DllとMetatraderの両方が同じシステムライブラリをフックする場合

OSの裏側には何があるのか、誰にもわからない。


リヒターを読む、おすすめです。Dllを扱うのに魔法はなく、ライブラリは現在のプロセスのアドレス空間にとって不要になるとすぐに常にアンロードされることが明らかになりました。このニーズは、カウンターによって決定されます。MQLプログラムをアンロードする瞬間にカウンタがゼロになっていない場合、どこかでエラーが発生し、荒れたエラーになっていることを意味します。

jartmailru>>:

つまり、私たちはAPIユーザーとして、通常.h / .libとライブラリの読み込みを介して、すべてのDll関数をフックしているのです。

アプリケーションの初期化時に発生する可能性が高く、私たちにできることは何もありません。

あるいは、すべてのライブラリを自分たちでロードし、すべての関数を手作業でダイナミックにリンクすることになります。

一方、素の数学、あるいはいくつかのAPI関数については、すべてがうまくいくはずです。


以上のことから、かなり現実に近いことが判明しました。つまり、dll-ineが依存関係をフックする場合 -。

の場合、このDllをロードしたアプリケーションをアンロードしない限り、オペレーティングシステムはもうこれをアンロードすることができません。

MT4の開発者がLoad FilterFreeLibraryの仕組みをユーザーの手に渡さないのは、非常に正しい判断でした。非常に正しい。トレーダーのプログラミング文化のレベルが問われますね。


そして最後に、マイクロソフト自身の推奨事項を読んでください。そこには、複雑なDLL間の依存関係を作ることは可能だが、これにはすべて限界があると白々しく書かれています。

 
AlexEro >> :
Windowsは任意のDLLをキャッシュします。>> キャッシュが多い。

私は、DLLをプロセスアドレス空間にマッピングする仕組みをキャッシュの仕組みとは呼びません。全く別のプロセスです。

 
HideYourRichess >> :

プロセスアドレス空間へのDLLマッピング機構をキャッシュ機構と呼ぶことはないでしょう。全く別のプロセスです。

あなたは、ちょっと変わった人ですね。Windowssystem32 ディレクトリに dllcache ディレクトリがあり、世界中のシスアドが regsvr32 を使ってすべての dll をアンロードしているのに、あなたはここで人々に寓話を話しているのです。誰をあてにしているのですか?ここにはバカはいない。

理由: