私はバグのあるサードパーティのDLLファイルを持っており、しばらくしてからアクセス違反の例外がスローされます。それが起こると、そのDLLファイルをリロードします。それ、どうやったら出来るの?ネイティブDLLファイルを動的にロードおよびアンロードする方法は?
答えて
試してみてください。この
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr LoadLibrary(string libname);
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
private static extern bool FreeLibrary(IntPtr hModule);
//Load
IntPtr Handle = LoadLibrary(fileName);
if (Handle == IntPtr.Zero)
{
int errorCode = Marshal.GetLastWin32Error();
throw new Exception(string.Format("Failed to load library (ErrorCode: {0})",errorCode));
}
//Free
if(Handle != IntPtr.Zero)
FreeLibrary(Handle);
あなたは介して通信ワーカープロセスを作成しますWINAPI GetProcAddressが
[DllImport("kernel32.dll", CharSet = CharSet.Ansi)]
private static extern IntPtr GetProcAddress(IntPtr hModule, string lpProcName);
IntPtr funcaddr = GetProcAddress(Handle,functionName);
YourFunctionDelegate function = Marshal.GetDelegateForFunctionPointer(funcaddr,typeof(YourFunctionDelegate)) as YourFunctionDelegate ;
function.Invoke(pass here your parameters);
そして私のdll関数を呼び出す方法は? 「DllImport」と宣言すると、このアプローチはうまくいきません – Poma
これを解決しましたか? ネイティブコードのいくつかのコードスニペットを提供できますか?どのようにネイティブコードを宣言し、デリゲートはどのように見えるのでしょうか?ありがとう – freshWoWer
@Pomaあなたはこれを稼働させましたか? GetDelegateForFunctionPointerを動作させる方法を教えてください。 – GuidoG
を使用し、最初のあなたは、この機能 に一致するdelegeateを作成する必要があります関数を呼び出すとしたい場合はCOMか別のIPCメカニズムその後、DLLが消えたら、ワーカープロセスを再起動することができます。
dllを読み込んで呼び出し、それがなくなるまでアンロードします。
VB.Netの例hereから次のコードを適用しました。
[DllImport("powrprof.dll")] static extern bool IsPwrHibernateAllowed(); [DllImport("kernel32.dll")] static extern bool FreeLibrary(IntPtr hModule); [DllImport("kernel32.dll")] static extern bool LoadLibraryA(string hModule); [DllImport("kernel32.dll")] static extern bool GetModuleHandleExA(int dwFlags, string ModuleName, ref IntPtr phModule); static void Main(string[] args) { Console.WriteLine("Is Power Hibernate Allowed? " + DoIsPwrHibernateAllowed()); Console.WriteLine("Press any key to continue..."); Console.ReadKey(); } private static bool DoIsPwrHibernateAllowed() { LoadLibraryA("powrprof.dll"); var result = IsPwrHibernateAllowed(); var hMod = IntPtr.Zero; if (GetModuleHandleExA(0, "powrprof", ref hMod)) { while (FreeLibrary(hMod)) { } } return result; }
- 1. .NET Compact FrameworkでネイティブDLLファイルをロードおよびアンロードする方法
- 2. F#dllをC#プロジェクトに動的にロードおよびアンロードする方法はありますか?
- 3. Windowsスクリプトファイル(WSF)内でJavascriptファイルを動的にロードおよびアンロードする
- 4. UpdatePanel、TriggerPostBack、およびUserControl TabPanelで動的にロードする方法
- 5. C++サードパーティのDLLファイルを動的にロードする方法
- 6. C#静的および動的にDLLをリンクする
- 7. Javascriptを動的にロード/アンロードする
- 8. クラスローダーは静的クラスをロードおよびアンロードする方法を教えてください。
- 9. CSharpCodeProviderを使用して生成されたdllを動的にロード/アンロードする
- 10. C#の動的にロードされたXAMLファイルおよびコマンドバインディング
- 11. マクロを使用してDLLを動的にロードする方法
- 12. アセンブリをロード/アンロードする方法は?
- 13. mefでdllファイルをアンロード
- 14. Visual StudioにDLLをアンロードする方法はありますか?
- 15. ビューを強制的にロード/アンロードする
- 16. Silverlightアセンブリの動的ロードとアンロード
- 17. C#アセンブリをappdomainに動的にロード/アンロードする
- 18. win32およびx64バージョンのネイティブDLLを1つのファイルに含めることはできますか?
- 19. jquery - あなたのコードを動的にロード/アンロードする
- 20. HTMLファイルとJavascriptファイルを動的に作成および変更する方法はありますか?
- 21. 別のDLL内でDLLを動的にロードする
- 22. C#を使って.dllをアンロードする方法は?
- 23. JavaScriptでCSSを動的に設定および変更する方法は?
- 24. phpBB3 - グループを動的に作成および管理する方法は?
- 25. アンマネージC++から混合モードC++/CLIの.dll(および依存関係)を動的にロード
- 26. AngularJSは動的に追加および
- 27. RunAndCollectで作成した動的アセンブリをアンロードする方法は?
- 28. C++でメモリからDLLをアンロードする方法は?
- 29. Reliabily DLL内のDLLをアンロード
- 30. Delphi7。どのように再起動せずにDLLをアンロードするには?
どのように全体のプロセスを代行プロセスにDLLをロードし、終了についてはどうですか?通常、プロセスはアクセス違反の後に壊れたとみなされます。 – CodesInChaos
これを行うには? AppDomainsについてはほとんど聞きませんでした。いくつかの例を投稿していただけますか? – Poma
それは、AppDomainsがネイティブのDLLだから助けにならないでしょう。 dllをロードし、プロセス間の通話を転送するために、あるプロセス間の通信形式を使用する2番目のプロセスが必要です。 .netリモーティングは1つの方法かもしれません。しかし、私はそれを自分でやっていません。 – CodesInChaos