0

我最终完成了一个发送和接收 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 
4

1 回答 1

0

您正在使用 GetPrivateProfileStringA 而不是 GetPrivateProfileStringW。

由于您使用的是 Unicode,因此您需要改用 GetPrivateProfileStringW。

于 2012-07-18T03:33:48.110 回答