मेरे पास एक छोटी सी पार्टी डीएलएल फाइलें हैं जो निष्पादन के कुछ समय बाद पहुंच उल्लंघन अपवादों को फेंकना शुरू कर देती हैं। जब ऐसा होता है तो मैं उस डीएलएल फ़ाइल को फिर से लोड करना चाहता हूं। मैं उसको कैसे करू?एक मूल 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);
आप कार्यों फोन पहले आप delegeate इस समारोह से मेल खाता है कि बनाना होगा और फिर 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);
और मेरे डीएलएल कार्यों को कैसे कॉल करें? जब मैं उन्हें 'DllImport' के रूप में घोषित करता हूं तो यह दृष्टिकोण – Poma
पर काम नहीं करता है क्या आपने इसे हल किया? क्या आप मूल कोड के कुछ कोड स्निपइप प्रदान कर सकते हैं? देशी कोड को कैसे घोषित किया जाना चाहिए और प्रतिनिधि कैसे दिखता है? धन्यवाद – freshWoWer
@Poma क्या आपको यह काम मिल गया? क्या आप कृपया मुझे बता सकते हैं कि GetDelegateForFunctionPointer कैसे काम कर रहा है? – GuidoG
उपयोग करना चाहते हैं एक कार्यकर्ता प्रक्रिया है कि के माध्यम से संचार बनाएं कॉम या एक और आईपीसी तंत्र। फिर जब डीएलएल मर जाता है, तो आप केवल कार्यकर्ता प्रक्रिया को पुनरारंभ कर सकते हैं।
डीएलएल लोड करें, इसे कॉल करें, और फिर इसे समाप्त होने तक इसे अनलोड करें।
मैंने निम्नलिखित कोड को 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. एक TinyMCE प्लगइन को गतिशील रूप से लोड और अनलोड कैसे करें
- 2. गतिशील रूप से एक CBitmap लोड करें
- 3. एक गतिशील रूप से लोड डीएलएल
- 4. एक एपीआई और जेएस फ़ाइल को गतिशील रूप से
- 5. एक संसाधन फ़ाइल को गतिशील रूप से
- 6. रनटाइम पर जावास्क्रिप्ट लोड और अनलोड करें
- 7. एक डीएलएल फ़ाइल लोड करें और कक्षा से एक्सेस विधियों को लोड करें?
- 8. अनलोड गतिशील वर्ग पीएचपी
- 9. मैं गतिशील रूप से जावास्क्रिप्ट फ़ाइल कैसे लोड करूं?
- 10. गतिशील टैब को गतिशील रूप से कैसे जोड़ें और निकालें?
- 11. लोड jQuery को गतिशील रूप से
- 12. वेबपृष्ठ से सीएसएस अनलोड करें
- 13. गतिशील रूप से लोड किया जा सकता है जावास्क्रिप्ट अनलोड किया जा सकता है?
- 14. जेडीबीसी/ओएसजीआई और बंडल में निर्भरता को स्पष्ट रूप से बताए बिना ड्राइवरों को गतिशील रूप से लोड कैसे करें?
- 15. लोड विंडो आइकन गतिशील रूप से
- 16. एक बच्चे को एपडॉमेन को अनलोड कैसे करें जिसमें
- 17. एक DLL से एक सी ++ वर्ग निर्यात
- 18. सिल्वरलाइट छवि: लोड यूआरएल गतिशील रूप से?
- 19. .ics फ़ाइल को गतिशील रूप से
- 20. गतिशील रूप से लोड की गई लाइब्रेरी
- 21. गतिशील रूप से लोड किए गए लिंक
- 22. कोड को गतिशील रूप से संकलित और निष्पादित कैसे करें?
- 23. आप विभिन्न डोमेन से जावास्क्रिप्ट फ़ाइल को गतिशील रूप से कैसे लोड करते हैं?
- 24. एक गतिशील वस्तु से गतिशील रूप से
- 25. कैसे गतिशील रूप से एक WPF मेनू
- 26. जावास्क्रिप्ट के साथ एक सीएसएस फ़ाइल पढ़ें और गतिशील रूप से पृष्ठ
- 27. लॉग फ़ाइल को गतिशील रूप से लॉग फ़ाइल
- 28. गतिशील रूप से लोड किए गए DIV
- 29. डीबग गतिशील रूप से लोड असेंबली
- 30. XmlSerializer गतिशील रूप से लोड प्रकार
कैसे एक प्रॉक्सी प्रक्रिया में dll लोड और पूरी प्रक्रिया को समाप्त के बारे में? आमतौर पर पहुंच उल्लंघन के बाद एक प्रक्रिया को तोड़ दिया जाता है। – CodesInChaos
यह कैसे करें? मैंने AppDomains के बारे में बहुत कुछ सुना। क्या आप कुछ उदाहरण पोस्ट कर सकते हैं? – Poma
चूंकि यह एक देशी डीएल है AppDomains आपकी मदद नहीं करेगा। आपको दूसरी प्रक्रिया की आवश्यकता है जो डीएलएल लोड करता है और फिर प्रक्रियाओं के बीच कॉल स्थानांतरित करने के लिए इंटर प्रोसेस संचार के कुछ रूपों का उपयोग करता है। .NET remoting एक तरीका हो सकता है। लेकिन मैंने खुद ऐसा नहीं किया है। – CodesInChaos