我正在将一些代码从 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/Invoking 该函数的代码应该使用 Interlocked 托管类
有什么好的选择/我可以解决这个问题吗?
对于上下文,我正在从这个答案中更新代码,其中 InterlockedIncrement 和 InterlockedDecrement 用于进行 COM 引用计数。现在我明白这些互锁函数是对多线程很重要的原子操作,但是由于 VBA 在单线程单元中运行,我什至需要打扰吗?是否this.refCount = this.refCount + 1
足够?代码略高于我的头脑,所以我不能 100% 确定我不会因为忘记这些功能而引入错误,但无论哪种方式都让我知道。