2011-12-02 5 views
5

VB6에서 VB.NET으로 모듈을 변환하는 작업이 거의 끝났지 만 다음 두 인용문에 문제가있어 궁금한 점이 있으시면VB6 모듈을 VB.NET으로 변환

Structure AUDINPUTARRAY 
    bytes(5000) As Byte 
End Structure 

바이트 행을 다음과 같이 변경하려고합니다. 바이트 크기 (5000)를 바이트 으로 지정하지만 구조에서 크기를 정의하지 않을 것입니다.


여기에 두 번째입니다 :

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

I 변환하는 방법에하지 단서가 : MSG 당신이 VB.Net에서 초기 크기를 선언 할 수 없습니다 문자열 * 200

답변

4

로를, 나중에 생성자 또는 필요한 곳에서 Redim 문을 사용하여 크기를 설정할 수 있습니다.

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

    End Sub 


End Structure 

Visual Basic .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

'Public Sub AUDINPUTARRAY()'는 생성자가 아닙니다. 생성자는'Public Sub New()'이지만 struct를위한 매개 변수없는 생성자를 가질 수 없습니다. – GSerg

+0

미안하지만 실수로 혼합 된 C# 구문을 사용합니다. – Akshita

1

당신은이를 통해이

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

나는 그 제안을 속성 할 수있는이 될 것이다, VB6에서 코드를 리팩토링하는 동안 당신도 여부를 다시 한번를 취하는 것이, .NET으로 고정 길이 msg As String * 200을 에뮬레이트합니다. 고정 길이 문자열을 계산하여 끝에서 문자를 잘라낼 수 있고 여전히 200 자 레코드가 있으면 함수의 부작용에 의존하는 지저분한 코드입니다.

VB6 (아직 진행중인 프로세스)에서 변환 할 때 문자열을 200 바이트의 공백 블록으로 명시 적으로 설정하면 코드의 의도가 명확 해졌습니다. 아마 선언에 의하여 :

String msg = String(' ', 200)

(즉, C#을뿐만 아니라 VB.net에 유효 인 경우).

관련 문제