64 位操作系统可以执行 32 位和 64 位应用程序,但是无法将这些类型的应用程序混合在一个进程中。例如,无法将 32 位 DLL 加载到 64 位进程中,反之亦然。加载到进程中的所有可执行组件(EXE 和 DLL 文件)必须与进程的二进制类型匹配。64 位应用程序的进程中组件应该尽可能地转换为 64 位进程。
试图创建新对象时出错。VB 的 New 关键字将试图加载 64 位 AutoCAD COM DLL。由于 VBA 为 32 位应用程序,因此无法加载 64 位 DLL。例如,如下代码
Dim color As AcadAcCmColor
Set color = New AcadAcCmColor
或
Dim col As New AcadAcCmColor
color.SomeMethod()
需要进行修改并转换为
Dim color As AcadAcCmColor
Set color = AcadApplication.GetInterfaceObject(“Autocad.AcCmColor.17”)。
以上问题应使用针对衍生自 IDispatch 的对象的 AcadApplication.GetInterfaceObject(“ProgIdOfAcAnyObject”) 来解决。衍生自 IUnknown的类(例如 AcSmSheetSet、 AcSmSheetMgr 等)可以不进行 64 位 VBA 移植。建议将此进程转换为 VB .Net。