明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5614|回复: 2

VBA兼容64位系统的问题(一)Declear声明无法正常运行问题

[复制链接]
发表于 2013-8-16 18:39:29 | 显示全部楼层 |阅读模式
近期由于操作系统升级到64位,同时试用AutoCAD2014版本,原来的一些VBA程序运行上出了一些问题:

1) Declear声明语句无法正常运行。
    查了一些资料,发现可以使用Declare PtrSafe来代替原来的Declear以解决这个问题。如原来32位的:
Private Declare Function acedSetColorDialog Lib _
   "acad.exe" (color As Long, ByVal bAllowMetaColor _
   As Boolean, ByVal nCurLayerColor As Long) As Boolean
在64位系统中,需要写成:
Private Declare PtrSafe Function acedSetColorDialog Lib _
   "acad.exe" (color As Long, ByVal bAllowMetaColor _
   As Boolean, ByVal nCurLayerColor As Long) As Boolean

这样问题好象解决了,其实问题还没有解决,因为怎样让同一程序能够在32位系统和64位系统中兼容又是个问题。
当然,最终还是找到方法:
  1. #If VBA7 Then
  2. Private Declare PtrSafe Function acedSetColorDialog Lib _
  3.    "acad.exe" (color As Long, ByVal bAllowMetaColor _
  4.    As Boolean, ByVal nCurLayerColor As Long) As Boolean
  5. #Else
  6. Private Declare Function acedSetColorDialog Lib _
  7.    "acad.exe" (color As Long, ByVal bAllowMetaColor _
  8.    As Boolean, ByVal nCurLayerColor As Long) As Boolean
  9. #End If
我们可以看到,这里用了一个系统变量“VBA7”,通过这个变量可以辨别VBA系统是否为VBA7,并通过这个判断来加载不同的语句。另外还有一个变量是“WIN64”,这个变量可以辨别系统是否为WIN64位系统,并通过它来加载不同的语句。

为什么这里用了VBA7而不是用WIN64变量呢,那是因为在2014版以前,虽然是Win64系统,但实际上VBA还是32位系统,Declear声明并不需要加上PtrSaft,所以通过VBA7来着判断会更为准确。

有个不完美的地方是,VBA7中对于没有加入PtrSaft的Declear的代码都标注为有误并显示红色,不过还好,显示归显示,运行还是给运行的,因为通过前面的判断语句,那句错误的语句并不会运行到,所以运行时不会出错。
以上解决方法具体说明链接:http://bbs.mjtd.com/thread-100890-1-1.html

2) 数据库连接ADO以及DAO方式都无法使用。
这项问题到目前找不到解决方案,还在找,不过象我的那个塑料公差标注程序,原来用了ACCESS数据库,由于VBA7是真64位,那些32位的数据库连接方式都彻底失效,而微软又没有针对64位出数据库连接方式(目前还未搜索到),所以只能改成非数据库方式运行,把数据全部变成字符串并通过split转成数组保存并在程序中定位调用,由于数据量少,影响不大。
等找到方法解决后,再跟大家分享。




该贴已经同步到 mccad的微博

评分

参与人数 2明经币 +1 金钱 +5 收起 理由
3xxx + 1
ps122hb + 5 很给力!

查看全部评分

发表于 2013-8-17 06:46:09 | 显示全部楼层
好资料,多谢分享
发表于 2015-9-26 10:50:23 | 显示全部楼层
VBA这样解决好了,VB怎么解决?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 09:54 , Processed in 0.211649 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表