liu_kunlun 发表于 2006-12-25 15:48:00

[交流]:autolisp调用dll

<p>周末作了一下autolisp调用dll的试验,现写出来与大家共享.<br/>本人学术不精,希望高手跟贴,使小弟增长见识.</p><p>1、在VB中,选择创建activex dll,在右上方将修改工程名为testdll,修改类名为test1<br/>在代码区输入下列代码:<br/>Public Function vvvaa(ByVal a As double) As double<br/>&nbsp;&nbsp;&nbsp; vvvaa = a<br/>End Function<br/>用文件菜单编译成testdll.dll<br/>于是创建了一个testdll.dll文件,其中包含一个test1类,test1类中有含Public Function vvvaa定义。</p><p>2、在autolisp中,用<br/>(setq vvvv (vlax-create-object "testdll.test1"))<br/>(vlax-invoke-method vvvv "vvvaa" 3)<br/>可获得返回值3(与输入值一致)</p><p>或用</p><p>(defun vvvv ( a / vbcls out)&nbsp;&nbsp; <br/>&nbsp;&nbsp; (setq vbcls<br/>&nbsp;&nbsp;&nbsp; (vlax-invoke-method<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (vlax-get-acad-object)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "getInterfaceObject"<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "testdll.test1"<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp; )<br/>&nbsp;&nbsp; (setq out<br/>&nbsp;&nbsp;&nbsp; (vlax-invoke-method vbcls "vvvaa" a)<br/>&nbsp;&nbsp; )<br/>&nbsp;&nbsp; (vlax-release-object vbcls)&nbsp;&nbsp; <br/>&nbsp;&nbsp; out<br/>)<br/>(vvvv 30)<br/>;;可得到返回值30(与输入值一致)</p><p><br/>;;注意事项:<br/>;;一、函数定义时的问题<br/>;; 1) 函数定义时应采用Public。<br/>;; 2) 输入参数时必须采用byval,否则输入参数传不进dll。<br/>;; 3) 如果输入参数是一个表,可将参数定义为Variant类型。<br/>;; 4) 如果返回参数是一个表,可将函数定义为Variant类型,返回值用array构造。<br/>;;二、autolisp中对返回参数的处理<br/>;;1)函数定义返回简单参数时,可直接得到结果<br/>;;2)函数定义返回variant,且结果为简单参数时,用vlax-variant-value得到结果<br/>;;3)函数定义返回variant,且结果为表时,<br/>;;&nbsp;&nbsp; 用(mapcar 'vlax-variant-value (vlax-safearray-&gt;list (vlax-variant-value得到表结果<br/>;;三、autolisp中对输入参数的处理<br/>;;1)函数定义输入为简单参数时,可直接填入数据<br/>;;2)函数定义输入为variant时,如输入简单参数,可直接填入数据也可用vlax-make-variant输入<br/>;;3)函数定义输入为variant时,如输入表时,用如下示例方法:<br/>;;&nbsp;&nbsp; (setq aa0 (vlax-make-safearray vlax-vbVariant '(0 . 2)))<br/>;;&nbsp;&nbsp; (vlax-safearray-fill aa0 '(9 2 "3"))<br/>;;&nbsp;&nbsp; (setq aa1 (vlax-make-variant aa0 ))</p><p></p>

baitang36 发表于 2024-7-15 09:28:27

本帖最后由 baitang36 于 2024-7-15 10:36 编辑

这个帖子可能是最孤独的精华帖了,有2296次围观,却18年没人回复。

自贡黄明儒 发表于 2024-7-15 11:52:14

baitang36 发表于 2024-7-15 09:28
这个帖子可能是最孤独的精华帖了,有2296次围观,却18年没人回复。

是呀,这么好的贴,大家都没发现。

tensir 发表于 2024-7-15 18:11:49

感谢作者的分享!

chenhuixo 发表于 2024-7-18 08:59:17

2006年圣诞节发的贴,现在才看到。而且还能评论!!!

逍遥无声 发表于 2024-8-4 07:01:50

lijiao 发表于 2024-8-4 07:48:45

时过境迁,现在应该用.net比较合适
页: [1]
查看完整版本: [交流]:autolisp调用dll