wjbzone 发表于 2015-11-25 14:31:04

vba代码在2004年有效,但在2016年无效

我有一个VBA程序(LatLong.dvb)将坐标从X,Y转换为纬度和经度。它在我的Windows 7 64位计算机上的Autocad 2004中运行良好,但在Autocad 2016中出现错误。(使用对DLL的调用)。)
(我安装了“AutoCAD_2016_AcVbaInstaller_Win_64bit_dlm.sfx.exe”)
我还设置了我的支持文件搜索路径,以包括路径
C:\LatLong
C:\program files\corpscon6\
下面是我认为可能是我的问题的代码部分:
模块1-常规-声明:
#如果是VBA7,则
PtrSafe函数SetNadconPath Lib“c:\program files\corpscon6\corpscon_v6.dll”(字节路径为字符串)作为LongPtr
#Else
声明函数GetNadconPath Lib“c:\Programs files\corpscon6\corpscon_v2.dll”(ByVal路径为字符串),只要
模块1-常规-convpts
将test7调暗为longLongPt
test7=SetNadconPath(“c:\program files\corpscon6\nadcon”)“路径为corpscon”
到corpscon数据文件,
以上最后一行导致此问题错误:
运行时错误'48:
找不到文件c:\program files\corpscon6\corpscon_V6.dll
比尔
**** Hidden Message *****

MickD 发表于 2015-11-25 16:27:50

嗨,比尔,自从我使用vba以来已经很久了,但是您是否在vba项目中设置了“引用”路径以查找您正在使用的库?
或者这就是我假设的AutoCAD支持路径的支持路径的意思吗?

n.yuan 发表于 2015-11-26 09:29:50

您可能已经知道,这很可能是32位(Acad2004)和64位(Acad2016)的问题
虽然您可能认为#If指令可以通过使外部函数根据相应的VBA版本返回正确的数据类型来解决问题,但它可能不起作用,因为在"If…#Else##,End If中,两个分支都指向相同的DLL文件,不太可能是同一DLL文件中的32位版本和64位版本。它是32位或64位。对于64位的Acad2016,您需要所述DLL的64位版本。

wjbzone 发表于 2015-11-30 09:31:35

感谢您的回复。引用路径就在我的VBA程序中。我联系了USACE(美国陆军工程兵团),他们没有64位版本的DLL。 我尝试为 Autocad 2016 安装 Autodesk 32 位 VBA 启用码,但该启用码不会安装在 64 位计算机上。 现在,当我想使用我的程序时,我将只使用2004。
考虑使用Python和一些临时文本文件进行转换的解决方法。

dhawk 发表于 2020-11-3 17:57:22

在https://github.com/dhawk/corpscon_v6_64bit.dll
有这个DLL的64位版本
页: [1]
查看完整版本: vba代码在2004年有效,但在2016年无效