結局、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