2011-12-02 18 views
5

में कनवर्ट करना मैं लगभग वीबी 6 से वीबीएनईटी में एक मॉड्यूल को परिवर्तित कर रहा हूं, लेकिन मुझे निम्नलिखित 2 उद्धरणों में समस्या हो रही है और मुझे आश्चर्य है कि इस बारे में जाने का कोई तरीका है:वीबी 6 मॉड्यूल को वीबीएनईटी

Structure AUDINPUTARRAY 
    bytes(5000) As Byte 
End Structure 

मैं करने के लिए कि बाइट्स लाइन बदलने के लिए कोशिश कर रहा हूँ: बाइट के रूप में मंद बाइट्स (5000), लेकिन यह दे मुझे एक संरचना में आकार को परिभाषित नहीं है। मैं नहीं कैसे कन्वर्ट करने के लिए पर एक सुराग है

Private i As Integer, j As Integer, msg As String * 200, hWaveIn As integer 

:


यहाँ दूसरा एक है संदेश स्ट्रिंग * 200

उत्तर

4

के रूप में आप VB.Net में एक प्रारंभिक आकार की घोषणा नहीं कर सकते हैं, आप कन्स्ट्रक्टर में रेडिम कथन का उपयोग करके या बाद में

Structure AUDINPUTARRAY 
    Public bytes() As Byte 
    Public Sub New(ByVal size As Integer) 
     ReDim bytes(size) ' set size=5000 

    End Sub 


End Structure 

विजुअल बेसिक .NET में, आप नहीं कर सकते जब तक आप घोषणा में VBFixedStringAttribute क्लास विशेषता का उपयोग नहीं करते हैं, तब तक एक निश्चित लंबाई रखने के लिए एक स्ट्रिंग घोषित करें। पिछले उदाहरण में कोड एक त्रुटि का कारण बनता है।

आप लंबाई के बिना एक स्ट्रिंग घोषित करते हैं। जब आपका कोड स्ट्रिंग के लिए मान निर्दिष्ट करता है, तो मान की लंबाई स्ट्रिंग की लंबाई निर्धारित करती है http://msdn.microsoft.com/en-us/library/f47b0zy4%28v=vs.71%29.aspx देखें। तो अपने declarration बन जाएगा

Private i As Integer, j As Integer, hWaveIn As Integer 
    <VBFixedString(200)> Private msg As String 
+0

वाह धन्यवाद, मुझे ReDim या VBFixedStringAttribute के बारे में पता नहीं था। – user1060582

+1

'सार्वजनिक उप AUDINPUTARRAY() 'एक निर्माता नहीं है। कन्स्ट्रक्टर 'पब्लिक सब न्यू()' है, लेकिन आपके पास structs के लिए पैरामीटर रहित कन्स्ट्रक्टर नहीं हो सकता है। – GSerg

+0

क्षमा करें यह गलती से था मैं मिश्रित सी # वाक्यविन्यास, मैं लागू हूँ। – Akshita

1

आप इस के माध्यम से जिम्मेदार बताते हैं

Public Structure <StructLayout(LayoutKind.Sequential)> AUDINPUTARRAY 
    Public <MarshalAs(UnmanagedType.ByValArray, SizeConst := 5000)> 
    Bytes() As Byte 
End Structure 
0

मुझे लगता है कि सुझाव है कि कर सकते हैं, नेट के लिए VB6 से अपने कोड पुनर्रचना जबकि यह है कि आप कि क्या आप भी चाहते हैं पर फिर से विचार निश्चित लंबाई msg As String * 200 अनुकरण करने के लिए। यदि आप निश्चित-लंबाई वाली स्ट्रिंग पर गिन रहे थे ताकि आप अंत में वर्णों को काट सकें, और अभी भी 200-वर्ण रिकॉर्ड हो, यह गन्दा कोड है जो फ़ंक्शन के साइड इफेक्ट्स पर निर्भर करता है।

जब हम वीबी 6 (एक स्थिर चल रही प्रक्रिया) से परिवर्तित होते हैं, तो हमने स्पष्ट रूप से स्ट्रिंग को 200-बाइट ब्लॉक में सेट करने के लिए कोड स्पष्ट करने का इरादा बनाया है। शायद की घोषणा के द्वारा:

String msg = String(' ', 200)

(अगर है कि के रूप में सी # के साथ-साथ VB.net में मान्य है)।