2010-07-12 14 views
11

से ऑब्जेक्ट्स की एक सरणी/सूची/संग्रह कैसे लौटा सकता हूं, मैं वीबी 6 एप्लिकेशन के लिए webservice पर प्रॉक्सी कॉल के लिए COM Visible C# ऑब्जेक्ट बना रहा हूं। मेरे पास एक तरीका है जो वस्तुओं की एक सरणी देता है।मैं सी # से VB6

public DocActionReport[] DocActionReportByDateRange(System.DateTime reportStartDate, System.DateTime reportEndDate) 
    { 
     object[] results = this.Invoke("DocActionReportByDateRange", new object[] { 
        reportStartDate, 
        reportEndDate}); 
     return ((DocActionReport[])(results[0])); 
    } 

जब मैं VB6 के माध्यम से इस विधि कॉल, इसलिए जैसे:

Dim proxy As New QueueMovementServiceClient.ReadQueueInfo 
Dim report() As QueueMovementServiceClient.DocActionReport 

report = proxy.DocActionReportByDateRange(startDate, reportEndDate) 

यह सफलतापूर्वक कार्यान्वित (मुझे लगता है कि वेब सेवा पर प्रवेश के माध्यम से देख सकते हैं) लेकिन कोई डेटा VB6 में वस्तु में लौट आता है (एलबाउंड (रिपोर्ट) == 0, यूबाउंड (रिपोर्ट) == -1)।

मैंने कुछ अलग दृष्टिकोणों की कोशिश की है (एक विधि विधि को विधि बदलना और संग्रह को ref पैरामीटर के रूप में पास करना) लेकिन अब तक कोई खुशी नहीं है।

वीबी 6 उपभोक्ता को ऑब्जेक्ट्स (सूची, संग्रह, जो भी) की एक सरणी वापस करने के लिए मुझे क्या करने की ज़रूरत है?

+0

क्या वीबी पक्ष में एक प्रकार की लाइब्रेरी है जिसमें डॉकएक्शन रिपोर्ट शामिल है? वीबी पक्ष पर प्राप्त प्रकार क्या है (TypeName का उपयोग करें)? क्या आपने इसे कॉल किए बिना अपने स्वयं के संगत डेटा का उपयोग करके एक रेपो बनाया है। इन्वोक()? –

+0

अपने सवालों के जवाब देने के लिए: हाँ, DocActionReport टाइप लाइब्रेरी के भीतर मौजूद है। लौटा प्रकार "ऑब्जेक्ट()" है हालांकि ऑब्जेक्ट व्यूअर इसे "DocActionReport()" के रूप में सही तरीके से सूचीबद्ध करता है। मेरे पास डीएलएल का परीक्षण करने और परिणामों की पुष्टि करने के लिए एक .NET क्लाइंट है और यह अपेक्षित के रूप में कार्य करता है। –

+0

क्या आप वाकई सरणी खाली नहीं हैं? मैं आपकी समस्या का पुनरुत्पादन नहीं कर सका। (क्या आप अभी भी इस देर की तारीख में इस प्रश्न की परवाह करते हैं?) –

उत्तर

0

वेब सेवा को कॉल करते समय सभी परिणामों को HTTP के माध्यम से यात्रा करने के लिए क्रमबद्ध किया जाना चाहिए।

मैं तुम्हें JSON या एक्सएमएल वापस जाने के लिए अन्य प्लेटफार्मों के साथ WebService अंतर-संचालित कर रही है।

+0

प्रश्न में वेब सेवा एक्सएमएल लौटाती है, लेकिन मुझे यकीन नहीं है कि आपका उत्तर कैसे प्रासंगिक है। –

+1

सी # सरणी/सूची/संग्रह लौटने के बजाय, आप उस स्ट्रिंग को वापस कर सकते हैं जिसमें इसमें JSON सरणी है। –

+0

यह परिवहन के बारे में नहीं है, लेकिन परिवर्तन। प्रॉक्सी मूल्य निष्पादित और प्राप्त कर रहा है, इसलिए एक्सएमएल और जेएसओएन अप्रासंगिक हैं। –

1

यहाँ आप के लिए एक चाल है:

  1. एक VB6 कॉम वस्तु के साथ ठीक उसी इंटरफ़ेस बनाएँ
  2. आयात कि .net में
  3. उपयोगकर्ता परावर्तक dll उत्पन्न इंटरॉप इंटरफ़ेस को देखने के लिए, इस वसीयत उम्मीद है कि आपको यह देखने की अनुमति मिलती है कि आपको किस प्रकार की वापसी की आवश्यकता है, फिर फिर आप ऑब्जेक्ट प्राप्त कर सकते हैं जो बिल्कुल मदद नहीं करेगा।

वीबी 6 में अगर मेरी याददाश्त काफी दूर जाती है, तो उन्होंने कुछ ऐसा उपयोग किया जो मुझे अभी भी एक परेशान ट्विच के साथ सुरक्षित करता है जिसे सुरक्षित कहा जाता है।

एक SAFEARRAY यहाँ क्या लौटने की जरूरत है, है इस लेख पर एक नज़र शायद है, मुझे आशा है कि यह आप (अपने एक ही मुद्दा) में मदद करता है ...

How to pass a SAFEARRAY from C# to COM

SAFEARRAY की मेरी आंत महसूस के बारे में पढ़ने के बाद क्या आप एक स्ट्रिंग वापस करने का फैसला करेंगे और कॉल के प्रत्येक पक्ष पर जेसन और जेएसओएन पार्सर्स होंगे;)

+0

मुझे इसे आज़मा देना होगा –

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