明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1914|回复: 2

[VBA]呼唤凭栏拭雪!如何调用Delphi编写的DLL?

[复制链接]
发表于 2005-3-31 10:03:00 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2005-4-1 14:13:16 编辑

使用VisualLISP调用Delphi编写的DLL,调试通不过 生成DLL完整的Delphi代码,生成的DLL文件名为MyDll.dll
library MyDll; // library 为 DLL
uses
SysUtils,Classes; function AddOne(i:integer):integer;stdcall; // 一般需要导出的函数都要是 stdcall
begin
Result:=i+1;
end; exports // 导出表
AddOne; begin
end. 调用DLL的LISP代码
(vl-load-com)
(defun c:testdll (/ a re)
(setq a (vla-getinterfaceobject
(vlax-get-acad-object)
"MyDll" ;1、这里肯定有问题!!!
) ; Delphi没有类模块,对照VB不知该怎么改动
)
(setq re (vlax-invoke-method ;2、是不是这样获得返回值?
a
"AddOne"
100 ;3、是不是这样传递参数?
)
)
(vlax-release-object a)
(princ re)
(princ)
)
运行提示 错误: Automation 错误。 加载应用程序时出现问题
附VBA帮助中关于GetInterfaceObject说明
Accepts a program ID and attempts to load it into AutoCAD as an in-process server. RetVal = object.GetInterfaceObject(ProgID) Object
Application
The object or objects this method applies to. ProgID
String; input-only
The program ID of the interface object to return. RetVal
Object
The interface object matching the program ID. Example中ProgID给了个令人摸不着头脑的例子
Dim poly As Object
Set poly = ThisDrawing.Application.GetInterfaceObject("Polycad.Application") 我的QQ:10824256
发表于 2005-3-31 11:27:00 | 显示全部楼层
我不大懂lisp,但为什么不用vba调用你的dll呢?如下:


Public Declare Function        Addone Lib "MyDll" (i As integer) As Integer
 楼主| 发表于 2005-3-31 13:09:00 | 显示全部楼层
又见老六 :)


单位没装Delphi,没法验证,就我的DLL你能给个完整例子吗?


另外,VBA调用DLL用不用先注册呀,调用时不涉及到DLL文件完整的文件名吗?DLL文件放到哪?与DVB同一个文件夹?AutoCAD支持路径?还是windows/system?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-27 18:25 , Processed in 0.176776 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表