0

デバイスがフォーマットされたデータパケットを必要とする場合、デバイスにプロトコルベースのデータ送信を実行します。

サンプルパケットデータはXXFSXXXFSXXXXXXXFSXXXXXX. 言及されているのXは、各文字列の最大長のサイズです。データが文字列の最大長よりも短い場合は、NULL 文字で埋める必要があります..11FS123FS1234XXXX(残りの X は NULL で埋められます)。

VB6関数の1つをVB.Netに変換しようとしていますが、以下は問題に直面している変換されたステートメントです

Option Strict Off
Option Explicit On
Imports Microsoft.VisualBasic.Compatibility.VB6
Imports System
Imports System.Runtime.InteropServices
Module FunctionCmd_Msg

    Public FunCommand_Msg As Fun_CommandMessage = Fun_CommandMessage.CreateInstance()
    'Function Command Message
    <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Auto)> _ _
    Public Structure Fun_CommandMessage
        <VBFixedString(1)> Public one As String
        <VBFixedString(1)> Public two As String
        <VBFixedString(3)> Public three As String
        Dim five As String
        <VBFixedString(8)> Public four As String
        Public Shared Function CreateInstance() As Fun_CommandMessage
            Dim result As New Fun_CommandMessage
            result.one = String.Empty
            result.two = String.Empty
            result.three = String.Empty
            result.four = String.Empty
            result.five = String.Empty
        End Function
    End Structure
End Module

仮定:

one = "1"
two = "1"
three = "123"
four = "5678"           
five = "testing"
FS = character (field separator)

文字列を連結するには、次のような固定長の文字列が必要です。

one & two & FS & three & FS & five & FS & four

出力: 4 は長さ 8 の固定長文字列であるため、残りの 4 文字は以下のように null で埋める必要があります

11 FS 123 FS testing FS 5678XXXX
4

2 に答える 2

6

固定長の文字列は、もはや .NET では意味がありません。Microsoft は、アップグレードを容易にするために同様のクラスを提供しようとしましたが、実際には、使用法に応じてコードを変更する必要があります。

固定長文字列は VB6 コードで何をしましたか? 正当な理由がなかったのですか?String次に、.NETで法線を使用します。

C API との相互運用のためでしたか? 次に、マーシャリングを使用して、C API 呼び出しで配列のサイズを設定します。

于 2012-08-06T10:30:17.380 に答える