【发布时间】:2019-04-22 00:52:15
【问题描述】:
好的,所以我有一个 Excel 工具,它可以打开一个用户表单,并可以选择根据选择播放声音并要求用户选择音源。这在 32 位中运行良好,但我最近更新到 64 位并了解到代码并不完全相同。
我的原始代码是这样的,位于用户窗体上的任何 Subs 之外(一般声明):
Declare Function PlaySound Lib "winmm.dll" _
Alias "PlaySoundA" (ByVal lpszName As String, _
ByVal hModule As Long, ByVal dwFlags As Long) As Long
我一直在网上四处寻找,看到很多关于 PtrSafe 函数和变量作为 LongPtr 的东西,所以我尝试根据我在网上看到的示例使用这段代码:
#If VBA7 And Win64 Then
Declare PtrSafe Function PlaySound Lib "winmm.dll" _
Alias "PlaySoundA" (ByVal lpszName As StrPtr, _
ByVal hModule As LongPtr, ByVal dwFlags As LongPtr) As LongPtr
#Else
Declare Function PlaySound Lib "winmm.dll" _
Alias "PlaySoundA" (ByVal lpszName As String, _
ByVal hModule As Long, ByVal dwFlags As Long) As Long
#End If
我得到的错误是“编译错误:未定义用户定义的类型”,它突出显示#If VBA7 And Win64 Then...下的这部分代码...
Declare PtrSafe Function PlaySound Lib "winmm.dll" _
Alias "PlaySoundA" (ByVal lpszName As StrPtr, _
ByVal hModule As LongPtr, ByVal dwFlags As LongPtr) As LongPtr
我完全不知所措。是否有我不知道的参考资料需要核对?当其他人使用该工具时,这会导致兼容性问题吗?任何帮助表示赞赏。
【问题讨论】:
标签: excel vba 32bit-64bit function-declaration