vb.net中使用GetPrivateProfileString访问INI文件,解决中文路径问题

前端之家收集整理的这篇文章主要介绍了vb.net中使用GetPrivateProfileString访问INI文件,解决中文路径问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

引自:http://blog.csdn.net/yizia/archive/2008/06/24/2580744.aspx


  在vb.net2005+winxp中,我使用GetPrivateProfileString读取一个ini文件,如果文件路径中含有中文,就会遇到一个奇怪的问题:第一次读取正常,第二次读取就取不到值。代码如下:

  1. @H_301_20@Private@H_301_20@Declare@H_301_20@FunctionGetPrivateProfileString@H_301_20@Lib"kernel32"@H_301_20@Alias"GetPrivateProfileStringA"(@H_301_20@ByVallpApplicationName@H_301_20@As@H_301_20@String,@H_301_20@ByVallpKeyName@H_301_20@As@H_301_20@String,@H_301_20@ByVallpDefault@H_301_20@As@H_301_20@String,@H_301_20@ByVallpReturnedString@H_301_20@As@H_301_20@String,@H_301_20@ByValnSize@H_301_20@As@H_301_20@Integer,@H_301_20@ByVallpFileName@H_301_20@As@H_301_20@String)@H_301_20@As@H_301_20@Integer
  2. @H_301_20@Privatem_filename@H_301_20@As@H_301_20@String="c:/椅子/slcuserinfo.ini"
  3. @H_301_20@Public@H_301_20@FunctionGetiniValue(@H_301_20@ByVallpKeyName@H_301_20@As@H_301_20@String,@H_301_20@ByValstrName@H_301_20@As@H_301_20@String)@H_301_20@As@H_301_20@String
  4. @H_301_20@DimstrTmp@H_301_20@As@H_301_20@String
  5. 'DimfileTmpAsString
  6. 'fileTmp=m_filename
  7. strTmp=@H_301_20@New@H_301_20@String("",100)
  8. 'CallGetPrivateProfileString(lpKeyName,strName,"",strTmp,Len(strTmp),fileTmp)
  9. @H_301_20@CallGetPrivateProfileString(lpKeyName,"",m_filename)
  10. GetiniValue=Left$(strTmp,InStr(strTmp,vbNullChar)-1)
  11. @H_301_20@End@H_301_20@Function

反复试验过以后,发现取消注释掉的代码就可以正常运行。百思不得其解,看api的声明没有问题啊,为什么lpFileName会出现异常呢?

不管怎样,这个问题耽误了我2个小时,先贴上故障和解决办法,以后再研究

原文链接:/vb/262341.html

猜你在找的VB相关文章