【问题标题】:When and why do you need to use PtrSafe [duplicate]何时以及为什么需要使用 PtrSafe [重复]
【发布时间】:2021-08-28 00:46:44
【问题描述】:

我想知道您是如何知道是否需要在 Microsoft Access 数据库中声明 PtrSafe 以使 ACCDE 能够在 32 位版本的 Microsoft Access 上工作。据我所知,我没有任何声明中包含“声明”一词。我的数据库有大量的 subs 和几种形式的全局 dim 变量,仅此而已。我最近有人无法打开我的 ACCDE 文件,他收到了 64 位消息错误,但我什至不知道在哪里可以找到给他带来问题的代码。我不是 Access 或 VBA 方面的专家,不太了解何时需要使用或不使用 PtrSafe 语句。

【问题讨论】:

  • 附注:这是一个问答网站。请注意,question 是单数,而不是复数。如果您有多个问题,则需要在单独的帖子中提问。我已经编辑了您的帖子以删除单独的第二个问题。如果您花一些时间在tour 和阅读help center 页面以了解该网站的工作原理,然后再开始发布,您会发现您在这里的体验会好很多。
  • PtrSafe 根据定义仅适用于 Declare 语句。如果你没有,你不能也不需要使用PtrSafe
  • 请注意,PtrSafe 表示您彻底检查了声明以确保 64 位指针安全,这意味着:不要在没有彻底检查的情况下将其拍到函数上以使错误消失,因为可能会导致您的应用程序在 64 位窗口上随机崩溃(不幸的是,我见过很多这样的情况)。
  • @ChrisStricland 的答案是正确的,因此这个问题被错误地关闭为重复...

标签: vba ms-access


【解决方案1】:

更新:问题不是 PtrSafe。问题是该文件是一个acde。 accdb 文件是位不可知的,只要遵循 PtrSafe 规则或不使用声明语句,但 accde 有一点,这意味着如果它是在 64 位版本上编译的,它只会在 64 位版本上打开。

================================================ ====

如果您的代码需要在 64 位版本上执行并且您正在使用 DECLARE 语句与 Win32.api 交互,则您需要使用 PtrSafe。有关更多信息,请参阅第二个链接中有关 api 兼容性的部分。

https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/ptrsafe-keyword

https://docs.microsoft.com/en-us/office/client-developer/shared/compatibility-between-the-32-bit-and-64-bit-versions-of-office

【讨论】:

  • 好的,是的,我明白了那部分,但如果我现有的代码中没有任何 Declare 语句,我什至如何在我的代码中实现 PtrSafe?我是否必须获取每个现有的 Private Sub 并在一开始就声明它,上面写着选项比较数据库?我见过一些例子,其中涉及之前和之后已经使用过 Declare 的东西,所以我不确定如何应用几乎完全由私有子组件组成的现有 VBA,其中从未使用过 Declare 这个词,并在其中实现 PtrSafe .我可以在之前和之后看到这样的例子吗?
  • 在第二个链接中,查找 API 兼容性部分。它解释了为什么需要 PtrSafe,以及您需要在什么情况下使用它。您在 32 位系统上的现有应用程序是否遇到问题?还是你只是问?
  • 是的,我有一个人无法打开我创建的 ACCDE 文件并收到 32 位/64 位警告消息。
  • 邮件内容是什么?
  • 它发生在所有 32 位版本上还是仅针对一个用户?
猜你喜欢
  • 2016-08-19
  • 1970-01-01
  • 1970-01-01
  • 2013-09-10
  • 1970-01-01
  • 2014-10-17
  • 2011-07-21
  • 2013-12-15
相关资源
最近更新 更多