2009-08-14 11 views
5

के साथ सी # से विंडोज एक्सप्लोरर से खींचें और छोड़ें मैं अब बहुत लंबे समय तक सरल कार्यक्षमता की तरह लगता हूं पर काम कर रहा हूं। विचार यह है कि मेरे पास TreeView के साथ एक एप्लिकेशन है। यह वृक्षदृश्य विंडोज एक्सप्लोरर की तरह फाइलों और फ़ोल्डरों में व्यवस्थित डेटाबेस की सामग्री का प्रतिनिधित्व करता है। तो यह समझ में आता है कि उपयोगकर्ता मेरे ऐप से और विंडोज एक्सप्लोरर में उन फ़ाइलों/फ़ोल्डरों को खींचने में सक्षम होना चाहिए।आईएसओरेज/आईएसट्रीम

मैंने फैसला किया कि यदि कोई फ़ोल्डर खींचता है तो मुझे IStream का उपयोग करना चाहिए यदि वे फ़ाइल खींचते हैं या IStorage। Win32/COM (और यहां एक बहुत ही सहायक व्यक्ति से नजदीक) के बारे में कभी भी जानना बहुत लंबा समय और सीखने का तरीका है, अंत में मुझे IStream या IStorage बनाया गया है।

तब मैंने पाया कि यह IStream या IStorage को विंडोज एक्सप्लोरर से पास करने के लिए, मुझे इसे STGMEDIUM में प्राप्त करना था। बेशक, मध्यम .tymed या तो IStream या IStorage होगा, जिस पर मैं उपयोग कर रहा हूं, लेकिन जैसा कि मैं समझता हूं कि medium.unionmemberIStream/IStorage पर एक सूचक होना चाहिए।

मैंने निश्चित कीवर्ड का उपयोग करने का प्रयास किया है (लेकिन यह निश्चित रूप से ब्लिटेबल नहीं है), मैंने केवल विस्फोटित चीज़ को बाइट सरणी में परिवर्तित करने की कोशिश की है, लेकिन ऐसा करने के लिए एक तरीके से नहीं आ सकता है, मैंने इसे पिन करने के लिए जीसीएचंडल का उपयोग करने की कोशिश की है (लेकिन यह अभी भी ब्लिटेबल नहीं है), और कई अन्य चीजें जो काम नहीं करतीं।

तो मेरा सवाल यह है: IStorage s और STGMEDIUM m दिया गया, मैं m.unionmember कैसे पॉप्युलेट करूं ताकि विंडोज एक्सप्लोरर खुश हो और ड्रॉप स्वीकार कर सके?

+0

यदि कोई http http के लिए आईएसट्रीम/आईएसटीओरेज के पूर्ण कार्यान्वयन के बारे में जानता है, तो कृपया एक और उत्तर पोस्ट करें, इस समस्या के लिए कुछ Google परिणाम हैं। –

+0

http://stackoverflow.com/questions/3168145/download-a-file-using-windows-istream –

उत्तर

2

आम तौर पर, सी यूनियनों को सी # में StructLayout.Explicit का उपयोग करके दर्शाया जाता है। यह शायद आपके मामले में काम नहीं करेगा, हालांकि - जब आप IStream और IStorage संदर्भों को ओवरले कर सकते हैं, तो मार्शलर दोनों मार्शल करने का प्रयास करेगा। आपकी सबसे अच्छी शर्त शायद STGMEDIUM की घोषणा में फ़ील्ड को IntPtr घोषित करने के लिए है, और इसे आरंभ करने के लिए Marshal.GetIUnknownForObject का उपयोग करें।

+0

धन्यवाद! मुझे नहीं पता कि मैं कैसे GetIUnknownForObject याद किया ... मुझे लगता है कि मुझे तोड़ना होगा और वास्तव में पता लगाना होगा कि मार्शलिंग एक दिन क्या है ... –

0

मुझे लगता है कि विषय में लंबे समय से पुराना है, लेकिन किसी को भी एक फ़ाइल खींचें की तलाश में और ड्रॉप इस चर्चा और विशेष रूप से dbirdz के पद की जाँच: http://www.daniweb.com/forums/thread166429.html

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

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

  • कोई संबंधित समस्या नहीं^_^