发行说明
这些项目与此版本的 ObjectARX 和 AutoCAD 托管类相关。 API 兼容性AutoCAD 2023 保持与 AutoCAD 2021 和 AutoCAD 2022 的二进制兼容性,并且不需要重新编译 ObjectARX 2021 或 ObjectARX 2022 应用程序。为 AutoCAD 2020 及更早版本开发的 ObjectARX 应用程序必须先重新编译,然后才能与基于 AutoCAD 2023 的产品一起使用。 开发环境编译用于 AutoCAD 2023 的 ObjectARX 项目时,必须使用 Microsoft Visual Studio® 2019 版本 16.11.5。®需要使用 Microsoft .NET Framework 的应用程序应面向 4.8 版本。 连接链接器是 *24.lib。 注册表项注册表项已从“R24.1”更改为“R24.2”。 对 dbmain.h 文件的更改以下全局函数和类已从 dbmain.h 文件移动到新的 acutacstring.h 和 dbObject.h 文件中:
AcGiContextAutoCAD 2022 Update 1 和 2 中的类 vtable 更改与类的成员函数相关的 vtable 发生了更改,这可能会影响为 AutoCAD 2022 构建的程序的兼容性,并加载到安装了 Update 1 或 2 的 AutoCAD 2022 中。受影响的函数之一是 。此问题不是为 AutoCAD 2022 构建的 SDK 或程序的二进制兼容性问题,因为它们应按预期在 AutoCAD 2023 中加载和运行。解决方案是安装 AutoCAD 2022 的最新更新。AcGiContextforceUseFillTrait() 通话前清除剪贴板LoadCatalogs()强烈建议调用该方法以从工具选项板管理器中清除所有当前目录,并在使用该方法加载新目录之前清空剪贴板。Clipboard.Clear()LoadCatalogs() 下面的代码演示如何在加载新目录之前清除剪贴板。 public void ClearClipboardAndLoadCatalogs() { IDataObject dataObj = System.Windows.Forms.Clipboard.GetDataObject(); string[] fmts = dataObj.GetFormats(); bool bFound = false; foreach(var fmt in fmts) { if (fmt.IndexOf("ACTC") != -1) { bFound = true; break; } } if (bFound) { System.Windows.Forms.Clipboard.Clear(); } Autodesk.AutoCAD.Windows.ToolPalette.ToolPaletteManager.Manager.LoadCatalogs(); } 32 位应用程序支持从 AutoCAD 2020 开始,不再提供 32 位支持。 图标透明度支持在 AutoCAD 2017 及更高版本中,不再支持仍使用 RGB 192,192,192 作为背景色的不透明位图图像。建议将这些位图图像转换为透明 PNG 图像。 对 API 的更改AcDbDatabase::saveAs()从 AutoCAD 2016 开始,无法再使用密码保存 DWG 文件。如果在参数中传递了任何密码信息,密码将被忽略,并将返回错误。pSecParams 支持 Microsoft® Visual Basic® for Application (VBA) 7.1从 AutoCAD 2014 开始,VBA 6.5 被 VBA 7.1 取代,VBA 7.1 专为 Windows 32 位和 64 位操作系统而设计。由于此更改,AutoCAD ActiveX 库已更新,以删除最初定义为支持 Windows 64 位的方法和特性。依赖于使用 32 位库和控件的 VBA 项目需要更新才能在 AutoCAD 64 位上正常运行。 对本机 C++ ARX 中的 和类型的更改,以及可能的 DWG 文件兼容性问题Adesk::BooleanInt32UInt32这适用于使用本机 C++ ARX 和 Adesk 命名空间的开发人员。到目前为止,在 Windows 中,该类型已被定义为 int (typedef-ed)。这是出于历史原因,因为早期的编译器不支持本机布尔类型。和 类型分别定义为 long 和 unsigned long。然而,在 Mac 平台上,它一直被定义为 bool,并且一直被定义为 和 。Adesk::BooleanAdesk::Int32UInt32Adesk::BooleanAdesk::Int32UInt32intunsigned int 但是,从此版本开始,Windows 类型与 Mac 类型匹配,因此始终定义为 和 / 始终是整数/无符号整数。请参阅 adesk.h 中的定义。这提供了跨平台的一致性和更好的类型检查。BooleanboolInt32UInt32 仅使用 Adesk 类型的代码不应受到影响。但是,混合使用 Adesk 类型和其他类型(如本机和 或 Win32)的代码可能会遇到一些编译器警告或错误。例如,你可能有一个接受 () 或 () 参数的函数,并且你正在向它传递一个变量。这现在将导致编译器错误,因为变量的类型以前是 int,现在是 bool。解决方法是更改变量类型或函数的 arg 类型,具体取决于哪个在代码中更有意义。intboolBOOLint &int *Adesk::Boolean 一个更微妙的问题涉及 and 方法(参见 dbfiler.h)。这些是“帮助程序”重载,它们将调用转发到较低级别的方法,如 、 等。同样,如果您的代码仅使用 Adesk 类型,那么事情应该像以前一样工作。但是,如果您将变量声明为 type or ,并且您正在调用 and on 它们,则这可能会导致文件兼容性错误。以前,此类调用解析为 和 ,但现在它们将解析为 和 。这将导致 ur 和 calls 读取和写入的二进制数据格式存在差异。请注意,在这种情况下,可能没有任何编译器警告或错误消息。AcDbDwgFiler::writeItem()readItem()writeInt32readBoolintBOOLwriteItemreadItemwriteBooleanreadBooleanwriteInt32readInt32readItemwriteItem 检测此类问题的方法是验证重新生成的代码是否仍能正确读取由以前版本的代码创建的图形文件,反之,验证以前版本的代码是否正确读取由新代码创建的图形文件。如果出现问题,则在打开图形时,您可能会收到来自AutoCAD的警告,指出对象读取不正确。在移植到新的 SDK 版本时,应始终进行此测试,但现在尤为重要。 针对这些问题的建议解决方法是将变量从 or 更改为 type ,或更改为 type 。直接调用较低级别的 etc 方法而不是 和 重载也是一个好主意,只是为了更清楚地说明您的代码正在使用什么类型。intBOOLboolAdesk::BooleanreadInt32writeBooleanreadItemwriteItem |
|Archiver|CAD开发者社区
( 苏ICP备2022047690号-1 苏公网安备32011402011833)
GMT+8, 2025-3-14 06:30
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.