guohq 发表于 2010-7-31 02:14:00

Lisp调用VB.net生成的TLB

<p>&nbsp;</p>
<p><font face="Verdana">1.打开visual studio 2005,新建一个项目,模板选择"类库";<br/><br/>2.在解决方案资源管理器里删除class1.vb<br/><br/>3.添加新建项<br/><br/>4.模板里选择"com类",然后输入名字,假定为TestDLL<br/><br/>5.添加代码 <br/>&nbsp;&nbsp;&nbsp; Public Sub SayHello(ByVal str As String)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox("Hello VB.NET For Lisp" &amp; str)<br/>&nbsp;&nbsp;&nbsp; End Sub<br/>&nbsp;</font></p>
<p><font face="Verdana">6.生成DLL,为了调用方便,到创建项目那个目录下找到生成的DLL文件,拷到D盘下<br/></font></p>
<p><font face="Verdana">7.生成TLB文件,供lisp调到</font></p>
<p><font face="Verdana"><br/>打开Visual Studio 2005 命令提示,输入regasm d:\testforlisp.dll /tlb ,确定后会在同样的位置生成一个tlb文件(第六步已经将生成</font></p>
<p><font face="Verdana">的testforlisp.DLL复制到D盘了)<br/>8.打开CAD,进入lisp编辑器,编写这样的一段代码<br/>(defun c:dll(/ obj&nbsp; )<br/>&nbsp; (vl-load-com)<br/>&nbsp; (vlax-import-type-library :tlb-filename&nbsp; "d:/testforlisp.tlb");导入TLB文件<br/>&nbsp; (setq obj (vlax-create-object "testforlisp.testdll"));创建对象,Testforlisp是命名空间,不是文件名,TestDll是创建的类名,</font></p>
<p><font face="Verdana">具体在VB编辑器下查看<br/>&nbsp; (vlax-invoke obj 'SayHello "tttttt") ;sayhello是testdll类下的一个方法,"ttttt"就是对应str的那个参数<br/>&nbsp; (vlax-release-object obj);做完释放对象<br/>&nbsp; )<br/>9.加载代码,在命令行里输入DLL<br/>&nbsp;</font></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>通过这种方法可以将大量的代码编写工作转到VB里去,而且可以写出功能多样的程序。</p>
<p>&nbsp;</p>
<p><font color="#ff0000" size="6"><strong>问题:通过这种方法生成的TLB,复制到其它电脑里,不能调用了。请高手支招,帮忙解决这个问题,谢谢!</strong></font></p>
<p>&nbsp;</p>

wylong 发表于 2010-7-31 14:42:00

<p><font style="BACKGROUND-COLOR: #ffffff" color="#000000">没有必要生成TLB的,只调用dll就行。</font></p>
<p><font style="BACKGROUND-COLOR: #ff0000" color="#000000">(vlax-import-type-library :tlb-filename&nbsp; "d:/testforlisp.tlb");导入TLB文件</font></p>
<p><font style="BACKGROUND-COLOR: #ffffff">这句没有必要,完全可以去掉。</font></p>
<p>&nbsp;</p>
<p>至于在其它电脑里不能调用的问题解决方法是把testforlisp.DLL复制到其它电脑并注册此dll<br/>注册dll方法:在“运行”中使用 regsvr32 X:\testforlisp.DLL</p>

guohq 发表于 2010-7-31 17:01:00

<p>直接生成的DLL没有办法导入,如下</p>
<p><font face="Verdana">Command: (vlax-import-type-library :tlb-filename&nbsp; "d:/testforlisp.dll")<br/>; error: bad argument type: VLA-OBJECT nil</font></p>
<p>&nbsp;</p>
<p>且将此DLL拷到别人电脑上,用regser32也无法注册</p>

guohq 发表于 2010-8-4 23:37:00

无人解答?

guohq 发表于 2013-8-14 15:12:34

迟到的回复: regasm d:\testforlisp.dll /tlb /codebase d:\testforlisp.dl 这样即可!

senvic001 发表于 2015-4-11 21:32:56

厉害
页: [1]
查看完整版本: Lisp调用VB.net生成的TLB