VBA kernel32 InterlockedIncrement在64位主机中不可用,我该怎么办



我正在将一些代码从32位VBA升级到64位VBA。它使用InterlockedIncrement函数:

Private Declare PtrSafe Function InterlockedIncrement Lib "kernel32" (ByRef Addend As Long) As Long

这以前是由kernel32导出的,但仅适用于x86调用程序。从64位Excel运行并不那么简单在kernel32中找不到DLL入口点InterlockedIncrement";错误-这是我发现的原因:

在64位窗口上,这些不是真正的函数[…]它们是编译器取而代之的是内部。P/调用该函数的代码应该正在使用联锁管理类

有什么好的替代方案/我能解决这个问题吗?


对于上下文,我正在更新SO上这个答案的代码,其中InterlockedIncrement&InterlockedDecrement用于执行COM引用计数。现在我明白了这些互锁函数是原子操作,这对多线程很重要,但是由于VBA在单线程单元中运行,我甚至需要麻烦吗?this.refCount = this.refCount + 1是否足够?代码稍微超出了我的想象,所以我不能100%确定我不会因为忘记这些函数而引入错误,但无论如何都要让我知道。

单线程插入式替换

Private Function InterlockedIncrement(ByRef Addend As Long) As Long
Addend = Addend + 1
InterlockedIncrement = Addend
End Function
Private Function InterlockedDecrement(ByRef Addend As Long) As Long
Addend = Addend - 1
InterlockedDecrement = Addend
End Function

相关内容

最新更新