2011-12-02 32 views
5

Tôi gần như đã hoàn tất chuyển đổi mô-đun từ VB6 sang VB.NET, nhưng tôi gặp sự cố với 2 dấu ngoặc kép sau và tự hỏi liệu có cách nào để thực hiện việc này không:Chuyển đổi mô-đun VB6 sang VB.NET

Structure AUDINPUTARRAY 
    bytes(5000) As Byte 
End Structure 

Tôi đang cố thay đổi dòng byte đó thành: Dim byte (5000) thành Byte nhưng không cho phép tôi xác định kích thước trong cấu trúc.


Đây là thứ hai:

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

tôi có không phải là một đầu mối về cách để chuyển đổi: msg As String * 200

Trả lời

4

bạn không thể tuyên bố một kích thước ban đầu trong VB.Net, bạn có thể đặt kích thước của nó sau này bằng cách sử dụng câu lệnh Redim trong hàm dựng hoặc bất cứ nơi nào cần thiết

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

    End Sub 


End Structure 

Trong Visual Basic .NET, bạn có thể không t khai báo một chuỗi có độ dài cố định trừ khi bạn sử dụng thuộc tính VBFixedStringAttribute Class trong khai báo. Mã trong ví dụ trước gây ra lỗi.

Bạn khai báo một chuỗi không có độ dài. Khi mã của bạn gán giá trị cho chuỗi, độ dài của giá trị xác định độ dài của chuỗi xem http://msdn.microsoft.com/en-us/library/f47b0zy4%28v=vs.71%29.aspx . nên declarration của bạn sẽ trở thành

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

Xin cảm ơn, tôi không biết về ReDim hoặc VBFixedStringAttribute. – user1060582

+1

'Public Sub AUDINPUTARRAY()' không phải là một hàm tạo. Constructor là 'Public Sub New()', nhưng bạn không thể có một constructor parameterless cho struct. – GSerg

+0

xin lỗi đó là do nhầm lẫn tôi trộn lẫn cú pháp C#, tôi xin lỗi. – Akshita

1

Bạn có thể làm qua này thuộc tính

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

tôi sẽ đề nghị rằng, trong khi refactoring mã của bạn từ VB6 để net, mà bạn hãy xem xét lại cho dù bạn thậm chí muốn để mô phỏng độ dài cố định msg As String * 200. Nếu bạn đang đếm trên chuỗi có độ dài cố định để bạn có thể cắt các ký tự ở cuối, và vẫn có bản ghi 200 ký tự, đó là mã lộn xộn phụ thuộc vào các tác dụng phụ của một hàm.

Khi chúng tôi chuyển đổi từ VB6 (một quá trình vẫn đang diễn ra), nó làm cho ý định của mã rõ ràng hơn nếu chúng ta đặt chuỗi thành một khối không gian 200 byte một cách rõ ràng. Có lẽ bằng cách tuyên bố:

String msg = String(' ', 200)

(nếu đó là hợp lệ trong VB.net cũng như C#).

Các vấn đề liên quan