2010-11-25 10 views
6

मेरे पास COM dll है जिसे मैं C++/Cli में उपयोग कर रहा हूं, इस COM Dll में से एक विधि IntPtr लौटाती है, मैं उसे मूल ऑब्जेक्ट पॉइंटर में कनवर्ट करना चाहता हूं। मैं यह कैसे कर सकता हूँ? में डाल कृपयाIntPtr को देशी C++ ऑब्जेक्ट में कनवर्ट करने के लिए कैसे करें

+0

आपको COM विधि और "मूल वस्तु" के लिए घोषणाएं प्रदान करने की आवश्यकता है। – logicnp

उत्तर

9

IntPtr एक अभिन्न प्रकार, आपको पहले एक सूचक प्रकार करने के लिए इसे बदलने की आवश्यकता है:

IntPtr somePtr; 
    ... 
    Mumble* fooPtr = (Mumble*)(void*)somePtr; 

या अधिक पठनीय संस्करण:

Mumble* fooPtr = (Mumble*)somePtr.ToPointer(); 

विधि कॉल अनुकूलित किया जाएगा रनटाइम पर दूर।

7

IntPtr में ToPointer विधि है जो void* देता है। इस विधि को कॉल करें, फिर इस पॉइंटर को सही देशी प्रकार पर डालने के लिए reintepret_cast का उपयोग करें।

+0

मुझे लगता है कि इस मामले में 'static_cast' का उपयोग करना ठीक होना चाहिए। मुझे किसी अन्य सूचक प्रकार के लिए एक शून्य-सूचक 'reintepret_cast' करने का कोई अच्छा कारण नहीं है। –

2

मैं Hans Passant's answer संशोधित करना चाहते हैं,
IntPtr सीधे शून्य सूचक .. आप देशी सी ++ सूचक किसी भी प्रकार में आसानी से डाली सकता है, जो देता है।

IntPtr somePtr; 
Mumble* fooPtr = (Mumble*)somePtr.ToPointer(); 
यहाँ

.ToPointer() शून्य सूचक वापस आ जाएगी, अब आप अपने कस्टम सूचक प्रकार पर कास्ट कर सकते।

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