Qt 5.11 - The dumpcpp Tool (ActiveQt)

डंपकैप टूल (ActiveQt)




qt

डंपकैप टूल (ActiveQt)

dumpcpp टूल एक प्रकार की लाइब्रेरी के लिए C ++ नेमस्पेस बनाता है।

एक प्रकार की लाइब्रेरी के लिए C ++ नेमस्पेस उत्पन्न करने के लिए, dumpcpp को निम्न कमांड-लाइन मापदंडों के साथ कॉल करें:

विकल्प परिणाम
इनपुट इनपुट के लिए प्रलेखन उत्पन्न करें। इनपुट एक प्रकार की लाइब्रेरी फ़ाइल या एक प्रकार की लाइब्रेरी आईडी, या एक ऑब्जेक्ट के लिए एक CLSID या ProgID निर्दिष्ट कर सकते हैं
-ओ फाइल फ़ाइल को .h और मेटा ऑब्जेक्ट फ़ाइल में .cpp करने के लिए वर्ग घोषणा को लिखता है
-एन नेमस्पेस C ++ नामस्थान नाम स्थान बनाएँ
-nometaobject मेटा ऑब्जेक्ट जानकारी के साथ .cpp फ़ाइल जनरेट न करें। मेटा ऑब्जेक्ट तब रनटाइम में उत्पन्न होता है।
-getfile LibID टाइपआउट करने के लिए फ़ाइल नाम को टाइप करने के लिए नाम बदलें
-compat डायनामिककॉल-संगत API के साथ नाम स्थान बनाएँ
-v संस्करण की जानकारी प्रिंट करें
-h प्रिंट सहायता

dumpcpp को qmake बिल्ड सिस्टम में एकीकृत किया जा सकता है। अपनी .pro फ़ाइल में, टाइप करें पुस्तकालयों को आप TYPELIBS चर में उपयोग करना चाहते हैं:

TEMPLATE = app
TARGET   = qutlook
QT += widgets axcontainer

TYPELIBS = $$system(dumpcpp -getfile {00062FFF-0000-0000-C000-000000000046})

उत्पन्न नाम स्थान सभी गणनाओं के साथ-साथ टाइप लाइब्रेरी में घोषित प्रत्येक coclass और interface लिए एक QAxObject उपवर्ग को घोषित करेगा। control विशेषता के साथ चिह्नित coclasses एक QAxWidget उपवर्ग द्वारा लपेटा जाएगा।

वे वर्ग जो सृजनात्मक कोक्लास को लपेटते हैं (अर्थात ऐसे क्रॉक्लस जिन्हें गैर-विशिष्ट के रूप में चिह्नित नहीं किया noncreatable ) में एक डिफ़ॉल्ट निर्माता होता है; यह आमतौर पर एक ही प्रकार का Application

Outlook::Application *outlook = new Outlook::Application;

अन्य सभी कक्षाएं केवल निर्माणकर्ता को एक IDispatch इंटरफ़ेस पॉइंटर पास करके बनाई जा सकती हैं; उन वर्गों को हालांकि स्पष्ट रूप से नहीं बनाया जाना चाहिए। इसके बजाय, पहले से निर्मित वस्तुओं के उपयुक्त एपीआई का उपयोग करें।

Outlook::_NameSpace *session = outlook->Session();

सभी कोक्लास रैपर में एक-एक कंस्ट्रक्टर होते हैं, जो प्रत्येक इंटरफ़ेस के लिए एक इंटरफ़ेस रैपर क्लास लेते हैं।

Outlook::NameSpace *session = outlook->Session();

आपको उप-विषय के संकेतों से जुड़ने में सक्षम होने के लिए कोक्लास बनाना होगा। ध्यान दें कि कंस्ट्रक्टर इंटरफ़ेस ऑब्जेक्ट को हटा देता है, इसलिए निम्नलिखित एक विभाजन दोष का कारण होगा:

Outlook::_NameSpace *tmp = outlook->Session();
Outlook::NameSpace *session = new Outlook::NameSpace(tmp);
delete tmp; // or any other use of tmp: segfault

यदि वापसी प्रकार किसी अन्य प्रकार की लाइब्रेरी में घोषित कोक्लास या इंटरफ़ेस प्रकार का है, तो आपको उस नाम के लिए शीर्ष लेख को शामिल करने से पहले उस नाम प्रकार के अन्य शीर्षकों को शामिल करना होगा जिसे आप उपयोग करना चाहते हैं। ।

डिफ़ॉल्ट रूप से, विधियाँ और संपत्ति लौटाने वाले उपविजेता प्रकार का उपयोग लाइब्रेरी में करेंगे। फ़ंक्शन का कॉलर ऑब्जेक्ट को वापस करने या वापस करने के लिए ज़िम्मेदार है। यदि -compat स्विच सेट किया गया है, तो COM ऑब्जेक्ट को लौटाने वाले गुण और विधि में रिटर्न टाइप IDispatch* , और नेमस्पेस इंटरफेस के लिए रैपर कक्षाएं घोषित नहीं करेगा।

इस स्थिति में, सही रैपर क्लास स्पष्ट रूप से बनाएं:

Outlook::NameSpace *session = new Outlook::NameSpace(outlook->Session());

आप निश्चित रूप से IDispatch का उपयोग कर सकते हैं * सीधे लौटे, जिस स्थिति में आपको इंटरफ़ेस के साथ समाप्त होने पर Release() कॉल करना होगा।

नाम स्थान में सभी वर्गों को एक मैक्रो के साथ टैग किया गया है जो आपको DLL से निर्यात या आयात करने की अनुमति देता है। ऐसा करने के लिए, मैक्रो को हेडर फ़ाइल को शामिल करने से पहले __declspec(dllimport/export) तक विस्तारित करने की घोषणा करें।

उपकरण बनाने के लिए आपको पहले QAxContainer लाइब्रेरी का निर्माण करना होगा। इसके बाद tools/dumpcpp में अपना मेक टूल tools/dumpcpp