我结束了一个发送和接收RS-232消息的简单程序。我的参数(波特率,COM端口)存储在INI文件中(如果不存在,文件将自动创建)。程序运行没有错误,但我不知道为什么它在路径长度超过限制时切断指向INI文件的路径(路径字符串中有Unicode日语字符)
我在New function(构造)中的路径字符串是这样的:"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
答案 0 :(得分:0)
您正在使用GetPrivateProfileStringA而不是GetPrivateProfileStringW。
由于您使用的是Unicode,因此需要使用GetPrivateProfileStringW。