Lisp调用VB.net生成的TLB
1.打开visual studio 2005,新建一个项目,模板选择"类库";2.在解决方案资源管理器里删除class1.vb
3.添加新建项
4.模板里选择"com类",然后输入名字,假定为TestDLL
http://bbs.mjtd.com/forum.php?mod=attachment&aid=NTI5MjB8NmNkOGViOGF8MTY1OTAzODExMnw3MzI2OTE4fDgyNTkw&noupdate=yes¬humb=yes
5.添加代码
Public Sub SayHello(ByVal str As String)
MsgBox("Hello VB.NET For Lisp" & str)
End Sub
http://bbs.mjtd.com/forum.php?mod=attachment&aid=NTI5MjZ8MTYzOTQwY2Z8MTY1OTAzODExMnw3MzI2OTE4fDgyNTkw&noupdate=yes¬humb=yes
6.生成DLL,为了调用方便,到创建项目那个目录下找到生成的DLL文件,拷到D盘下
7.生成TLB文件,供lisp调到
打开Visual Studio 2005 命令提示,输入regasm d:\testforlisp.dll /tlb ,确定后会在同样的位置生成一个tlb文件(第六步已经将生成
的testforlisp.DLL复制到D盘了)
8.打开CAD,进入lisp编辑器,编写这样的一段代码
(defun c:dll(/ obj)
(vl-load-com)
(vlax-import-type-library :tlb-filename"d:/testforlisp.tlb");导入TLB文件
(setq obj (vlax-create-object "testforlisp.testdll"));创建对象,Testforlisp是命名空间,不是文件名,TestDll是创建的类名,
具体在VB编辑器下查看
(vlax-invoke obj 'SayHello "tttttt") ;sayhello是testdll类下的一个方法,"ttttt"就是对应str的那个参数
(vlax-release-object obj);做完释放对象
)
9.加载代码,在命令行里输入DLL
通过这种方法可以将大量的代码编写工作转到VB里去,而且可以写出功能多样的程序。
问题:通过这种方法生成的TLB,复制到其它电脑里,不能调用了。请高手支招,帮忙解决这个问题,谢谢!
Lisp调用VB.net生成的TLB
Lisp调用VB.net生成的TLB
没有必要生成TLB的,只调用dll就行。
(vlax-import-type-library :tlb-filename"d:/testforlisp.tlb");导入TLB文件
这句没有必要,完全可以去掉。
至于在其它电脑里不能调用的问题解决方法是把testforlisp.DLL复制到其它电脑并注册此dll
注册dll方法:在“运行”中使用 regsvr32 X:\testforlisp.DLL
直接生成的DLL没有办法导入,如下
Command: (vlax-import-type-library :tlb-filename"d:/testforlisp.dll")
; error: bad argument type: VLA-OBJECT nil
且将此DLL拷到别人电脑上,用regser32也无法注册
无人解答? 迟到的回复: regasm d:\testforlisp.dll /tlb /codebase d:\testforlisp.dl 这样即可! 厉害
页:
[1]