繁体   English   中英

Excel vba GetPrivateProfileString可以在2007年正常工作,但不能在2010年工作

[英]Excel vba GetPrivateProfileString working 2007, but not 2010

我声明了以下代码:

Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long

我有如下功能来访问它:

Private Function ReadIniFileString(ByVal Sect As String, ByVal Keyname As String) As   String
Dim Worked As Long
Dim RetStr As String * 128
Dim StrSize As Long
Dim iNoOfCharInIni As Long
Dim sIniString As String
Dim sProfileString As String

iNoOfCharInIni = 0
sIniString = ""
If Sect = "" Or Keyname = "" Then
   MsgBox "Section Or Key To Read Not Specified !!!", vbExclamation, "INI"
Else
   sProfileString = ""
RetStr = Space(128)
StrSize = Len(RetStr)
Worked = GetPrivateProfileString(Sect, Keyname, "", RetStr, StrSize, IniFileName)
   If Worked Then
      iNoOfCharInIni = Worked
      sIniString = Left$(RetStr, Worked)
   End If
 End If
ReadIniFileString = sIniString
End Function

这可以在2007年下工作,但在Excel 2010上出现错误:

Worked = GetPrivateProfileString(Sect, Keyname, "", RetStr, StrSize, IniFileName)

我在网上看到“我找不到子或函数错误”的消息,我应该能够通过在PtrSafe声明函数并返回LongPtr来解决此问题。 我已经做到了,但是得到了相同的结果!

请帮忙!

非常感谢!

拉斯

要在64位版本的Excell中实现此功能,您需要将PtrSafe属性添加到函数声明中,如下所示:

Declare PtrSafe Function GetPrivateProfileString Lib "kernel32" Alias...

您没有说Excel 2010是32位还是64位。我不确定如果在64位Excel实例中运行的VBA模块尝试调用32位例程和kernel32.dll会发生什么情况,该怎么办是一个32位库。 由于不赞成使用GetPrivatePorfileString,我怀疑它没有移植到kernel32.dll的64位副本中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM