我最终完成了一个发送和接收 RS-232 消息的简单程序。我的参数(波特率、COM 端口)存储在 INI 文件中(如果文件不存在将自动创建)。该程序运行没有错误,但我不知道为什么它会在路径长度超过限制时切断指向 INI 文件的路径(路径字符串中有 Unicode 日文字符)
我在新函数(构造)中的路径字符串是这样的:"D:\通信プログラム20120709\新しいフォルダー\新しいフォルダー\新しいフォルダー\新しいフォルダー\Debug\Config.ini"
在事件函数中,它将变为:D:\通信プログラム20120709\新しいフォルダー\新しいフォルダー\新しいフォ・
在咨询了 Internet 上的一些资源后,他们向我展示了 .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