本帖最后由 vectra 于 2017-9-23 09:40 编辑
6、lisp端使用其实很简单,主要是vlax-create-object和vlax-invoke,用完记得vlax-release-object就行
启动cad 2008 32bit(08只有32位吧)
命令: (setq o (vlax-create-object "hello.myclass"))
#<VLA-OBJECT _MyClass 05e2ff8c>
命令: (princ (vlax-invoke o "hello"))
.net COM".net COM"
启动cad2012 64bit
命令: (setq o (vlax-create-object "hello.myclass"))
#<VLA-OBJECT _MyClass 0000000008f2f698>
命令: (princ (vlax-invoke o "hello"))
.net COM".net COM"
可见,均能正常返回期望的值。调用类库只需要搞清类库的名称,而不用关心类库的版本。不同cad平台上调用类库的lisp代码是完全一样的。
扩展(MD5实现):
看看COM方式如何帮你的lisp计算MD5值
引用里添加 System.Web后,在MyClass.cs里添加如下代码:
- public string md5(string str)
- {
- return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str, "MD5").ToLower();
- }
使用新生成的dll替换D盘上的hello.dll文件,注意如果cad里加载过此类库,可能造成文件占用无法替换,此时要关闭cad后才能替换文件
再在LISP里测试
_$ (setq o (vlax-create-object "hello.myclass"))
#<VLA-OBJECT _MyClass 05f4ff8c>
_$ (princ (vlax-invoke o "md5" "lisper"))
3d69708ee30384a14d0e1d7ffa1a104a"3d69708ee30384a14d0e1d7ffa1a104a"
可见类库名及函数名不区分大小写,并且正常返回了lisper字符串的md5值。也就是一行代码的事,而且可靠性是由微软帮你保证的。
|