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

 
TheXpert >> :

最初の質問 - どのプロセスからDLLをアンロードするか、システムはどのように知るのでしょうか?

質問2 - dllをロードせずにエントリーポイントを見つけるにはどうしたらいいのでしょうか?


さて、本来は。dllは、正しく登録するために、regsvr中にロード、アンロードされます。もちろん他のプロセスからのアンロードにも効果はない。

自分よりバカにしたような言い方をしないこと。でも、ひとつだけいいことがあって、マナを読むことができるんです。

明らかに。インジケータ(Expert Advisor)の非初期化の実装でdllのアンロードに加えて、それに直接関連するものは、順番に端末の正しい動作を保証しないハッキングのカテゴリにdllの不正なリリースを回すことができます。


すべてにおいて - あなたがダミーでないことを証明することはできないでしょう、頑張ってください、挑戦し続けてください。

2All:彼を管理者として雇おうとは思わないでください。

А?何?

誰かわかる人、これを人間の言葉に訳してください。

(いや、さっきは勘違いしていた。TheExpertはMetaQuotesのような会社の社員であるはずがない。私の返信がすぐに削除されただけだ)

 
AlexEro >> :
ハッカーおじさん、あなたの言葉には論理性がありません。もしライブラリが常にアンロードされているなら、なぜあなたの言う「私の」FreeLibraryの呼び出しは「多くの場合うまくいかない」のでしょうか?deinit()ブロックの中でFreeLibraryを余分に呼び出すと、どんな害があるのでしょうか?FreeLibrary()を呼び出すと、何らかの形でライブラリのリリースがブロックされるとか、そういうご意見はありませんか?はっきりしないね、クールハッカーおじさん、バレバレだよ。

理解するのは難しいことではありません。もし、DLL自体が正しくアンロードされないのであれば、あなたは手持ち無沙汰で、DLLのコードにミスがあったということです(おそらく、DllMainかマスクされたexapsesにミスがあります)。WindowsもTerminalもDLLに極めて忠実なので、これしか理由がない。さて、MT4の開発者が、思い込みの激しい管理者の悪戯心から隠してきたFreeLibraryについてです。もしDLLコードが正しければ、この関数の呼び出しは不要です。ちなみに、これは端末のドキュメントを見ればわかりますが、すべて勝手にアンロードされるからです。しかし、あなたのようにコードが間違っていると、FreeLibraryはデッドロックを引き起こし、/または、端末をクラッシュさせるかもしれません。FreeLibraryは、エラー時のアンロードを保証していないことに注意してください。FreeLibraryが役立つこともあれば、逆に事態を悪化させることもあります。抽選となりますので、このような場合は本機能を使用することはお勧めできません。良いコードを書くことをお勧めします。もちろん、それができなければ、DLは役に立ちません。それはそうですね。


実際、もうここで何度も言われてるけど、他の掲示板のバカを演じるのは本当にやめた方がいいかもね。

 
HideYourRichess >> :

これは難しいことではありません。もし、DLL自体が正しくアンロードされないのであれば、それはあなたの手が悪く、DLLのコード、(そしておそらくDllMain、またはマスクされたexapsesで)ミスを犯したということです。WindowsもTerminalもDLLに極めて忠実なので、これしか理由はありません。さて、MT4の開発者が、思い込みの激しい管理者の悪戯心から隠してきたFreeLibraryについてです。もしDLLコードが正しければ、この関数の呼び出しは不要です。ちなみに、これは端末のドキュメントを見ればわかりますが、すべて勝手にアンロードされるからです。しかし、あなたのようにコードが間違っていると、FreeLibraryはデッドロックを引き起こし、/または、端末をクラッシュさせるかもしれません。FreeLibraryは、エラー時のアンロードを保証していないことに注意してください。FreeLibraryが役立つこともあれば、逆に事態を悪化させることもあります。抽選となりますので、このような場合は本機能を使用することはお勧めできません。良いコードを書くことをお勧めします。もちろん、それができなければ、DLは役に立ちません。それはそうですね。


実はもう何度もここで語られているのですが、掲示板のバカを演じるのはやめた方がいいかもしれませんね。

ハッカーおじさん、普通こういう時は「そこで何吸ってるんですか」と聞くのが(長距離の大企業でも)通例ですが、もっと丁寧に聞きますよ。

ハッカーおじさん、マーク・トウェインの「私はいかにして農業新聞を編集したか」を読んだことがありますか?あなたはどうですか?そこでは、新聞編集者が、ルタバガが何であるかを知らずに木からルタバガを採っていることを書いている。

 

さあ、マーク・トウェインのような「権威」を味方につけようとするのも、安っぽい手口です。


Dllとは何か、どのように機能するかを理解していないことを認めること。


何がわからないんだ? 管理者もDLも下手くそなのか?

 
HideYourRichess >> :

さあ、マーク・トウェインのような「権威」を味方につけようとする、安っぽい手口と同じだ。


Dllとは何か、どのように機能するかを理解していないことを認めること。


え、そういうものなんですか?しかし、ハッカーおじさんは、マイクロソフト社自身さえも、そのことを知らないし、それを修正する方法も知らないのです。プロの間では「DLL HELL」と呼ばれています。聞いてないのか?以下は、wikipediaからのリンクです。

https://en.wikipedia.org/wiki/Dll_hell

最後にマイクロソフト社からのリンクを含め、たくさんのリンクがあります。

私は、このフォーラムで、すべての仕組みと対処法を知っている人に事実上出会えたことを、おじさん、嬉しく思っています。

 

Dll Hellは昔からよく知られた問題で、ユーザーレベルで解決する方法もよく知られています。


しかし、この問題が端末とどのように関連しているのか説明してみてください。


このWikiをざっと読んだだけでは、まだ問題を理解できていないのではないでしょうか?念のため、「問題の本質は、特定の機能を サポートすることを目的としたDLLのバージョンの衝突である」と念を押しておく。DLL地獄は 悪いプログラミングコンセプトの一例で、隠れた地雷のように、システムの複雑化と改良に伴って困難が急増する」(ロシアの人々が我々の議論に従うので、ロシアのwikiから説明を引用しました)。


そこで、Dll Hellとターミナルの関係について教えてください。 また、この問題に対して、regsvr32やFreeLibraryはどのように対処できるのでしょうか?

 
HideYourRichess >> :

Dll Hellは昔からよく知られた問題で、ユーザーレベルで解決する方法もよく知られています。


しかし、この問題が端末とどのように関連しているのか説明してみてください。


このWikiをちらっと見ただけで、まだ問題を理解していないのではないかと勘ぐってしまうのです。


では、Dll Hellとターミナルの関係は? また、regsvr32やFreeLibraryは、この問題に対してどのように役立つのでしょうか?

今回も一般的なフレーズで具体的な内容はなく、ただの悪口です。DLL地獄は問題とは直接関係なく、あなたがDLLのすべてを知っていて、問題はなく、賢い人は皆、名もなきドックを熟考して勉強すれば、DLLのあらゆる問題を回避できるという発言と関係しているだけです。上記の問題の残りの質問には、引用とリンクを付けて回答しました。あなたと違って。

 
AlexEro >> :

今回も一般的なフレーズで具体的な内容はなく、ただただ漫然としたものでした。DLL地獄は問題とは直接関係なく、あなたがDLLのすべてを知っていて、問題はなく、名もなきドクを思慮深く研究して愚かでない誰もがDLLのANY問題を避けることができるという発言のみを指します。上記の問題の残りの質問には、引用とリンクを付けて回答しました。あなたと違って。

気を悪くしたのか!?さあ、私の例を見てください。私は、対話者を貶めようとするあなたの些細な安っぽい試みに注意を払ったりしません。


そして、あなたがステップするべきではないレーキを知っていれば、本当にDLLについて複雑なものは何もありません、特にそれはメガクォータによって提供される実装で簡単です。


dllの問題を回避するためには、まさにこのdllを有能に書くしかないことを認めたくないんだろうなー、バカだなー。ここで必要なリファレンスは何なのか、理解することは不可能です。

 

個人的な経験では、(delphiやc++で書いている場合)ダイナミックライブラリで問題はないです。それを使っていたインジケータを無効化した後、すぐに解除してもらいました。素早くインジケータを無効化+DLLを入れ替えると必ず成功しました。

私のコードが明示的にLoadLibraryを呼び出さないからといって、FreeLibraryを使うことはありません - 他人のエラーを修正するつもりはありません(再現可能で私のコードと関係ない場合、開発者に知らせるのは簡単です)。

この問題は、サードパーティのコード(windowsやmt)が正しく動作していない結果であることを強く疑っています。

 

皆様にご挨拶申し上げます。

この話題が面白くなって、ターミナルに付属している簡単なサンプル DLLSampleプロジェクト)で、議論されている内容を確認することにしました。

VS 6.0でコンパイルした後、焼いたDLLはターミナルで正常に動作しますが、自分自身をアンロードすることはできません

以下、主な機能を紹介します。

BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
  {
//----
   switch( ul_reason_for_call)
     {
      case DLL_PROCESS_ATTACH:
      case DLL_THREAD_ATTACH:
      case DLL_THREAD_DETACH:
      case DLL_PROCESS_DETACH:
         break;
     }
//----
   return(TRUE);
  }

そして今、DLLがどのように存在し、風の下で働くかを本当に理解し、VS 6.0(例)のプロジェクトで正しくコンパイルする方法を知っている目利きの人に質問しています。

main関数のプロトタイプは正しいですか?

ストリームATTACH/DETACHを管理するには?

どこで読めばいいのか、できれば実例があるといいのですが。