Delphi 7自动化控制AutoCAD“无效的类字符串”

时间:2017-04-05 17:39:17

标签: delphi automation autocad

我的应用程序,用Delphi 7编写,用ActiveX向AutoCAD发送命令。它适用于我的大多数客户,但在极少数情况下,它无法与AutoCAD通信并报告错误Invalid Class String(AutoCAD应用程序运行正常)。此行后会弹出错误:

AcadV := GetActiveOleObject('AutoCAD.Application');

我已经搜索了很多这个问题,但我找不到合适的解决方案。

3 个答案:

答案 0 :(得分:1)

下面的小型控制台应用程序显示了如何检查而不是名称 自动化对象在Windows注册表中注册。自动化对象需要有一个注册表项,以便您可以按import React, {PropTypes, Component} from 'react'; import axios from 'axios'; import './App.css'; class App extends Component { constructor(props) { super(props); this.state = { events: [] }; } componentDidMount() { axios.get('http://localhost:4000/api/v1/events') .then(function (response) { this.setState({events: response.data}); }) .catch(function (error) { console.warn(error); }); } render() { // this.state.events keeps being an empty array [] return ( <div className="home"> { this.state.events.map((month) => { console.log(month) }) } </div> ); } } export default App;

中的名称调用它们

请注意AutoCAD.Application 以下功能不保证您将能够使用访问该对象 CreateOleObject / GetActiveOleObject但是,如果在那里找不到预期的名称 很可能有些不对劲,你可以通过重新安装来解决这个问题 自动化对象软件。

IsRegistered

顺便说一下,在我的(有限)经验中,GetActiveOleObject并不总是成功的。因此,如果失败,则可能值得尝试使用CreateOleObject。

Delphi程序员有一本非常好的书叫做#34; Delphi COM Programming&#34; 作者:埃里克哈蒙,如果你能掌握一份副本,并且有无数的自动化 互联网上的教程。参见例如https://msdn.microsoft.com/en-us/library/windows/desktop/ms221375(v=vs.85).aspx让MS接受主题。

答案 1 :(得分:0)

将文件api.py应用程序功能更改为以下内容:

def应用程序(自身): 如果self._app为None: 对于范围在(35,15,-1)中的v: 尝试: self._app = comtypes.client.GetActiveObject('AutoCAD.Application。'+ str(v),dynamic = True) 打破; 除了WindowsError: 尝试: self._app = comtypes.client.GetActiveObject('AutoCAD.Application。'+ str(v)+'。1',dynamic = True) 打破; 除了WindowsError: 尝试: self._app = comtypes.client.GetActiveObject('AutoCAD.Application。'+ str(v)+'。2',dynamic = True) 打破; 除了WindowsError: 下一个;

    return self._app

答案 2 :(得分:0)

对于AutoCAD 1011来说,正确的命令是

AcadV := GetActiveOleObject('AutoCAD.Application.18');

对于较新版本的AutoCAD,数字18发生了变化(我认为2013年为19,而2021年为23)。我创建了一个条目,用户可以根据其版本更改此编号,现在我的应用程序可以在所有AutoCAD版本上运行。