2011-03-02 12 views
9

मैं अपने सी ++ प्रोग्राम में MFC उपयोग कर रहा हूँ (विजुअल स्टूडियो 2008 का उपयोग) चलाता है। मुझे अपने कार्यक्रम की शुरुआत में AfxGetInstanceHandle() को कॉल करना होगा।AfxGetInstanceHandle() एक अभिकथन विफलता

AFXWIN_INLINE HINSTANCE AFXAPI AfxGetInstanceHandle() 
{ ASSERT(afxCurrentInstanceHandle != NULL); 
return afxCurrentInstanceHandle; } 

ASSERT बयान में विफल रहता है:

यह समारोह एक को तोड़ने बिंदु से चलाता है। मैं सोच रहा था कि अगर आप इसे एक्सेस करने का प्रयास करने से पहले afxCurrentInstanceHandle आरंभ करने के लिए कुछ करना चाहते थे।

पुनश्च: मैं एक साझा dll में MFC उपयोग कर रहा हूँ।

संपादित

मेरे कोड है कि तरह है:

int _tmain(int argc, _TCHAR* argv[]) 
{ 

    CoInitialize(NULL); 
    AfxGetInstanceHandle(); 
    return 0; 
} 

मैं आदेश में एक CComModule प्रारंभ और फिर इसका इस्तेमाल कॉम वस्तु हेरफेर करने के लिए करने के लिए InstanceHandle उपयोग करना चाहते हैं।

उत्तर

2

आप MFC उपयोग कर रहे हैं यदि आप एक मुख्य, wmain, _tmain प्रदान नहीं किया जाना चाहिए, या WinMain - MFC अपने स्वयं के प्रवेश बिंदु प्रदान करता है। अपने CWinApp व्युत्पन्न कक्षा के InitInstance में प्रारंभिक कोड रखें। यदि आपके पास CWinApp व्युत्पन्न कक्षा नहीं है तो आपने परियोजना को सही तरीके से नहीं बनाया है - एक एमएफसी एप्लिकेशन बनाने के लिए विजुअल स्टूडियो विज़ार्ड का उपयोग करें।

+0

तो वहाँ सभी CWinApp वस्तु बिना AfxGetInstanceHandle() का उपयोग करने के लिए कोई तरीका है? – Arthur

+0

मुझे लगता है कि मैं कुछ गलत कर रहा था, और मुझे COM ऑब्जेक्ट का उपयोग करने के लिए वास्तव में इसकी आवश्यकता नहीं थी। धन्यवाद। – Arthur

+2

डाउनवोट क्योंकि यह सच नहीं है। विंडो/जीयूआई अनुप्रयोगों के लिए आपका कथन सही है, प्रोजेक्ट विज़ार्ड एक CWinApp व्युत्पन्न क्लास बनाएगा। लेकिन जब आप MFC समर्थन के साथ एक सांत्वना आवेदन बनाते हैं, तो एक मुख्य (_tmain) समारोह के साथ स्रोत कोड बनाई गई है और AfxWinInit MFC स्थापित करने के लिए पहले कहा जाता है। –

5

अगर आप DLL/आवेदन के लिए यूनिकोड/MBCS या डिबग/रिलीज निर्माण मोड मिश्रण हो सकता है।

+0

मेरी परियोजना और मल्टी थ्रेडेड डीबग डीएलएल के साथ, साझा किए गए डीएलएल में एमएफसी का उपयोग करके और इसकी सभी निर्भरताओं का पालन किया जा रहा है, और मल्टीबाइट वर्णों का उपयोग कर। यह कुछ और – Arthur

+0

के कारण हो सकता है, जिसने मेरी समस्या को हल किया। –

6

उपयोग:

AFX_MANAGE_STATE(AfxGetStaticModuleState()); 

इससे पहले कि आप कहते हैं:

AfxGetInstanceHandle(); 
7

मैं MFC के साथ एक कंसोल अनुप्रयोग बना दिया है और भी संदेश मिला है। मुझे समाधान मिला, कि आपको अपने मुख्य (_tmain, आदि) की शुरुआत में "प्रस्तावना" की आवश्यकता है।

int main(int args, char* argv[]) //, char *envp[]) 
{ 
    // initialize MFC and print and error on failure 
    if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) 
    {  
     // TODO: change error code to suit your needs  
     cerr << _T("Fatal Error: MFC initialization failed") << endl;  
     return 1; 
    } 
    AfxGetInstanceHandle(); 
    // TODO: code your application's behavior here. 
    ... 
संबंधित मुद्दे