2011-12-02 18 views
5

Neredeyse bir modül VB6'dan VB.NET'e dönüştürmeyi bitirdim, ancak şu 2 alıntıdan dolayı sorun yaşıyorum ve bu konuda herhangi bir yol olup olmadığını merak ediyorum:VB6 modülünü VB.NET'e dönüştürme

Structure AUDINPUTARRAY 
    bytes(5000) As Byte 
End Structure 

ben bu bayt hattını değiştirmeye çalışıyorum: byte olarak Dim bayt (5000) ama bana bir yapıda boyutunu tanımlamak izin vermiyor.


İşte ikinci bir tane:

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

Ben dönüştürmek için nasıl bir ipucu yok: msj VB.Net'te bir başlangıç ​​boyutunu beyan edemez dize * 200

cevap

4

gibi, Visual Basic .NET

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

    End Sub 


End Structure 

gerekli her yere yapıcı daha sonra Redim deyimini kullanarak boyutunu ayarlamak edebilirsiniz veya canno Bildirimde VBFixedStringAttribute Sınıf özniteliğini kullanmadığınız sürece sabit bir uzunluğa sahip olması için bir dize bildirmeniz. Önceki örnekteki kod bir hataya neden olur.

Uzun olmayan bir dizeyi bildirirsiniz. Kodunuz dizeye bir değer atarken, değerin uzunluğu dizesinin uzunluğunu belirler. Bkz. http://msdn.microsoft.com/en-us/library/f47b0zy4%28v=vs.71%29.aspx . böylece declarration

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

Vay be, ben ReDim veya VBFixedStringAttribute farkında değildim. – user1060582

+1

'Ortak Sub AUDINPUTARRAY()' bir kurucu değil. Oluşturucu 'Public Sub New() 'dır, ancak struct'ler için parametresiz bir kurucunuz olamaz. – GSerg

+0

özür dilerim yanlışlıkla ben C# sözdizimi, ben aplogize. – Akshita

1

Bu yoluyla

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

ben öneririm niteliklerini yapabilirsiniz olacak, VB6 kodunuzu üstlenmeden yaparken bile isteyip başka bir göz atın o, .net sabit uzunlukta msg As String * 200 öykünmesini. Sabit uzunluklu dizede sayıyorsanız, böylece karakterleri sonlandırabilirdiniz ve hala 200 karakterlik bir kayda sahip olursunuz, bu bir fonksiyonun yan etkilerine bağlı olan karmaşık koddur.

VB6'dan (devam eden bir süreç) dönüştürüldüğümüzde, dizeyi açık bir şekilde 200 baytlık bir boşluk bloğuna ayarlarsak, bu kodun amacını daha net hale getirdi. Belki bildirerek:

String msg = String(' ', 200)

(yani C# yanı sıra VB.NET geçerli ise).