【问题标题】:IronPython clr not working with the AutoCAD API's dllsIronPython clr 不适用于 AutoCAD API 的 dll
【发布时间】:2018-08-26 22:52:10
【问题描述】:

我工作的公司正在切换到 Pandas,并希望在 IronPython 中重建旧的 C# 应用程序。我正在尝试将我在 C# 中构建的 AutoCAD 自动化转换为 IronPython,但出现错误。我正在尝试使用 clr 从 AutoCAD 的 API 库中加载 dll。

参考代码:

import clr
path = "C:\\Program Files\\Autodesk\\Autodesk AutoCAD Civil 3D 2014\\"
clr.AddReferenceToFileAndPath(path + "AcCoreMgd.dll")
clr.AddReferenceToFileAndPath(path + "AcDbMgd.dll")
clr.AddReferenceToFileAndPath(path + "AcMgd.dll")
clr.AddReferenceToFileAndPath(path + "AcMgdInternal.dll")

错误:

系统错误:无法加载文件或程序集“accoremgd,版本=19.1.0.0,文化=中性,PublicKeyToken=null”。该程序集是为不同的处理器编译的。

我有点困惑,因为我在 Visual Studio 中构建了自动化,是在我目前用来将其转换为 IronPython 的同一台机器上。

【问题讨论】:

  • 会不会存在 x86 与 x64 的问题?这些托管 DLL 是为 AnyCPU 还是特定目标编译的?您的 IronPython 是在 x86 还是 x64 上运行?
  • 我正在使用 x64 Eclipse 运行 x64 IronPython 并尝试插入 x64 AutoCAD dll
  • 我也刚刚尝试在 x64 Visual Studio(构建 C# 应用程序的同一程序)中重建并运行它,但我仍然遇到相同的错误
  • forums.autodesk.com/t5/NET/… 似乎暗示这些 DLL 可能只能在 autocad 中托管,而您的 Ironpython 项目可能不是这种情况?
  • @SimonOpelt 是的,我做了更多阅读,发现 dll 使用了 IronPython 无法处理的许多自定义功能。所以我决定构建一个 python 包装器 Pandas 可以与之通信,但让 C# 应用程序来完成实际工作。非常感谢您的帮助!

标签: c# ironpython autocad


【解决方案1】:

我不是 Python(也不是 IronPython)专家...但确实 AutoCAD 安装文件夹中的 DLL 是包含所有引用的实际 DLL。如果您从位于 \inc\ 文件夹的 ObjectARX SDK 获取 DLL,那么您将获得一个干净的引用,该引用不会有辅助引用。从 www.objectarx.com 下载此 sdk。

请注意,如果您使用这些 DLL,则必须在 AutoCAD 上加载您的应用程序。不确定这是否可以用 Python(不是专家)来完成。我知道你可以 NETLOAD(用于 .NET 应用程序)。

如果您正在开发与 AutoCAD 通信的外部应用程序,那么您应该使用 COM Interop。请参阅此帖子中的 cmets:Trying to read data from a DWG using Autodesk.AutoCAD.DatabaseService What DLL do I need to reference to?

【讨论】:

    【解决方案2】:

    我使用的是 AutoCAD 2015,而不是加载“acmgdinternal.dll”,而是像这样加载以下 dll“accoremgd.dll”和“acdbmgdbrep.dll”

    #clr.AddReferenceToFileAndPath(path + 'acmgdinternal.dll')
    clr.AddReferenceToFileAndPath(path + 'accoremgd.dll')
    clr.AddReferenceToFileAndPath(path + 'acdbmgdbrep.dll')
    

    我不确定这两个 dll 是否都需要,所以我都加载了它们。我之所以选择它们,是因为我在使用 C# 为 AutoCAD 调试 dll 时使用它们,例如 Kean Walmsley 文章 here 中的 PythonLoader 和 PYLOAD@

    我希望这会有所帮助。

    【讨论】: