[交流]: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/> 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) <br/> (setq vbcls<br/> (vlax-invoke-method<br/> (vlax-get-acad-object)<br/> "getInterfaceObject"<br/> "testdll.test1"<br/> )<br/> )<br/> (setq out<br/> (vlax-invoke-method vbcls "vvvaa" a)<br/> )<br/> (vlax-release-object vbcls) <br/> 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/>;; 用(mapcar 'vlax-variant-value (vlax-safearray->list (vlax-variant-value得到表结果<br/>;;三、autolisp中对输入参数的处理<br/>;;1)函数定义输入为简单参数时,可直接填入数据<br/>;;2)函数定义输入为variant时,如输入简单参数,可直接填入数据也可用vlax-make-variant输入<br/>;;3)函数定义输入为variant时,如输入表时,用如下示例方法:<br/>;; (setq aa0 (vlax-make-safearray vlax-vbVariant '(0 . 2)))<br/>;; (vlax-safearray-fill aa0 '(9 2 "3"))<br/>;; (setq aa1 (vlax-make-variant aa0 ))</p><p></p> 本帖最后由 baitang36 于 2024-7-15 10:36 编辑这个帖子可能是最孤独的精华帖了,有2296次围观,却18年没人回复。 baitang36 发表于 2024-7-15 09:28
这个帖子可能是最孤独的精华帖了,有2296次围观,却18年没人回复。
是呀,这么好的贴,大家都没发现。 感谢作者的分享! 2006年圣诞节发的贴,现在才看到。而且还能评论!!! 时过境迁,现在应该用.net比较合适
页:
[1]