2009-11-17 12 views
37

एक Win32 आवेदन की HINSTANCE WinMain को पारित कर दिया है, लेकिन वहाँ वर्तमान HINSTANCE का निर्धारण करने का कोई अन्य तरीका है (जैसा भी मामला आप नहीं बता सकते हैं, मैं बहुत Win32 प्रोग्रामिंग करने के लिए नया हूँ!)? मुझे लाइब्रेरी के अंदर एक विंडो बनाने की आवश्यकता है और (चूंकि लाइब्रेरी क्रॉस प्लेटफ़ॉर्म है), आईडी इसे पास करने की आवश्यकता नहीं है।वर्तमान हिंदुस्तान निर्धारित करें?

उत्तर

61

स्मृति में कार्य करता है, GetModuleHandle(NULL); रिटर्न उदाहरण संभाल हैं।

+4

पूरी तरह से सही नहीं है: यह exe के हिंसा को दोहराता है। यदि कोड डीएलएल में निष्पादित होता है, तो इससे गलत व्यवहार हो सकते हैं –

+1

@ सर्ज: वह जो कह रहा है उससे, निष्पादन योग्य का संकेत वह वही है जो वह चाहता है। –

+4

+1: मॉड्यूल नाम में गुजरकर, उस फ़ंक्शन का उपयोग डीएलएल के 'हिनस्टेंस' को प्राप्त करने के लिए भी किया जा सकता है। ध्यान दें कि 'HINSTANCE' और' HMODULE' अनिवार्य रूप से विंडोज के आधुनिक संस्करणों में समकक्ष हैं। –

8

यदि आप एमएफसी का उपयोग कर रहे हैं, तो आप AfxGetInstanceHandle का उपयोग कर सकते हैं।

आप MFC का उपयोग नहीं कर रहे हैं, तो आप उपयोग कर सकते हैं: GetWindowLong (hWnd, GWL_HINSTANCE)

+0

कि केवल विधि MFC है? – dicroce

+0

हां, लेकिन मैंने एक गैर एमएफसी तरीके से भी अपडेट किया। –

+1

मानता है कि मैं पहले से ही एक खिड़की (और इस प्रकार है, और hwnd) है ... मैं अपने पुस्तकालय के लिए खिड़की के बाहर निर्माण का काम पुश करने के लिए कोशिश कर रहा हूँ ... – dicroce

13

__ImageBase अपने दोस्त, विशेष रूप से पुस्तकालयों के मामले में है।

ध्यान दें कि जुड़ा हुआ ब्लॉग पोस्ट (आर चेन से है, हालांकि नहीं ब्रायन Bondy से जुड़े हुए एक के रूप में एक ही पोस्ट) पढ़ने लायक है (टिप्पणियां सहित!)

+0

अनदेखी 'GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS' साथ बोझिल [GetModuleHandleEx] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms683200.aspx), यह वास्तव में केवल ** विश्वसनीय ** रास्ता मिल रहा है मॉड्यूल हैंडल, और यह स्वीकार्य उत्तर होना चाहिए। – IInspectable

0

समारोह AfxGetStaticModuleState() काम कर देता है । यदि आप इसे किसी डीएल के भीतर कहते हैं, तो फ़ंक्शन हैंडल को डीएलएल में वापस कर देता है, अगर एक्सई के भीतर कॉल यह निष्पादन योग्य को हैंडल देता है।

DWORD size; 
TCHAR fileName [MAX_PATH]; 
HMODULE hModule = AfxGetStaticModuleState()->m_hCurrentInstanceHandle; 
::GetModuleFileName (hModule, fileName, size); 
+1

प्रश्न टैग किया गया है * winapi *। विंडोज एपीआई में कोई 'AfxGetStaticModuleState' नहीं है। – IInspectable

संबंधित मुद्दे