本帖最后由 jacenhe 于 2024-6-27 09:23 编辑
1、COM 是很强大的技术,没有完美的东西,但凡事应多利用优点。
例如 WebView2 就是可以通过 COM 接口实现浏览器控件的跨进程通信,因此拥有卓越的性能与方便的开发接口。
很多时候技术没有优劣,怎么去使用才是最重要的。
2、为什么不能创建 COM 接口。
正常不会出现这种问题。
如果创建 COM 接口失败,检查一下是否没有正确安装 AutoCAD,或者使用了绿色阉割版。
3、哪里有 aardio 开发 AutoCAD 的教程。
aardio + AutoLISP 快速入门 (qq.com)
aardio 自带了很多调用 AutoCAD 的范例。
4、能调用 COM 不等于只能 COM。
不使用 COM 接口,混写 LISP 与 aardio 代码的示例。
- import process;
- import com.cad;
- for hwnd in process.eachWindow( "@acad.exe" ) {
-
- com.cad.sendCopyData(hwnd,`(print '<?={
- {
- {car=12,cdr=23},//LISP 点对
- {1,2,3,path},//LISP 列表
- {name="Tom",age=23},//LISP 关联列表
- "来自 aardio 代码的字符串",
- 123,
- false,
- true
- }
- }?>)`)
- }
5、其实很简单,以实现多文件对话框为例。
在工程向导界面点选『窗口程序 / ActiveX EXE 』。
发布生成 EXE 文件,双击 EXE 注册控件(或调用 /r 命令行参数静默注册)。
然后在 AutoLISP 里就可以直接调用 aardio 编写的函数了( aardio 会自动生成下面的 AutoLISP 代码)。
- (defun GetFiles (filter title / obj files)
- (setq obj (vlax-get-or-create-object "aardioTestControl.Sample"))
-
- (setq hwndOwner (itoa(vla-get-hwnd(vlax-get-acad-object))))
- (setq files (vlax-invoke obj 'GetFiles filter title hwndOwner))
-
- (vlax-release-object obj)
- files
- )
|