0

結局、RS-232メッセージを送受信する簡単なプログラムになりました。私のパラメータ(ボーレート、COMポート)はINIファイルに保存されます(ファイルが存在しない場合は自動的に作成されます)。プログラムはエラーなしで実行されますが、パスの長さが制限を超えたときにINIファイルを指すパスが切断される理由がわかりません(パス文字列にUnicode日本語文字が含まれています)

New関数(構築)のパス文字列は次のようになります。"D:\通信プログラム20120709\新しいフォルダー\新しいフォルダー\新しいフォルダー\新しいフォルダー\Debug\Config.ini"

イベント関数では、次のようになります。D:\通信プログラム20120709\新しいフォルダー\新しいフォルダー\新しいフォ・

インターネット上のいくつかの情報源を調べた後、彼らは.NET文字列が非常に大きな容量を持つことを私に示したので、私の問題はVB.NET文字列に関係していないと思います。

どんな助けでもいただければ幸いです。


コメントから

以下のコードの最初の行の後でパスが変更されていることがわかりました

RS232TransPort = IniRoutine.GetString(IniSectionName, ConfigName.COMPort, "COM3")
RS232Baudrate = IniRoutine.GetInteger(IniSectionName, ConfigName.Baudrate, 9600)

これは、文字列を取得する関数です。

Public Function GetString(ByVal Section As String, ByVal Key As String, ByVal [Default] As String) As String 

    Dim intCharCount As Integer 
    Dim objResult As New System.Text.StringBuilder(256) 

    intCharCount = GetPrivateProfileString(Section, Key, [Default], objResult, objResult.Capacity, strFilename) 
    GetString = String.Empty 

    If intCharCount > 0 Then GetString = Left(objResult.ToString, intCharCount) 

End Function 

ここで、strFilenameはこのクラスのローカル変数です。

そしてこれはAPIデクレアです:

Private Declare Ansi Function GetPrivateProfileString _ 
        Lib "kernel32.dll" Alias "GetPrivateProfileStringA" _ 
        (ByVal lpApplicationName As String, _ 
        ByVal lpKeyName As String, ByVal lpDefault As String, _ 
        ByVal lpReturnedString As System.Text.StringBuilder, _ 
        ByVal nSize As Integer, ByVal lpFileName As String) _ 
        As Integer 
4

1 に答える 1

0

GetPrivateProfileStringW の代わりに GetPrivateProfileStringA を使用しています。

Unicode を使用しているため、代わりに GetPrivateProfileStringW を使用する必要があります。

于 2012-07-18T03:33:48.110 に答える