我的应用程序,用Delphi 7编写,用ActiveX向AutoCAD发送命令。它适用于我的大多数客户,但在极少数情况下,它无法与AutoCAD通信并报告错误Invalid Class String
(AutoCAD应用程序运行正常)。此行后会弹出错误:
AcadV := GetActiveOleObject('AutoCAD.Application');
我已经搜索了很多这个问题,但我找不到合适的解决方案。
答案 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版本上运行。