lazybones 发表于 2005-3-31 10:03:00

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

本帖最后由 作者 于 2005-4-1 14:13:16 编辑 <br /><br /> 使用VisualLISP调用Delphi编写的DLL,调试通不过



生成DLL完整的Delphi代码,生成的DLL文件名为MyDll.dll<BR>library MyDll;       // library 为 DLL <BR>uses <BR>       SysUtils,Classes;


function AddOne(i:integer):integer;stdcall;       // 一般需要导出的函数都要是 stdcall <BR>begin <BR>       Result:=i+1; <BR>end;


exports               // 导出表 <BR>       AddOne;


begin <BR>end.


调用DLL的LISP代码<BR>(vl-load-com)<BR>(defun c:testdll (/ a re)<BR>       (setq        a (vla-getinterfaceobject<BR>                               (vlax-get-acad-object)<BR>                               "MyDll"                        ;1、这里肯定有问题!!!<BR>               )                                                                                                                                                                                                                               ;               Delphi没有类模块,对照VB不知该怎么改动<BR>       )<BR>       (setq        re (vlax-invoke-method                                                                       ;2、是不是这样获得返回值?<BR>                                       a<BR>                                       "AddOne"<BR>                                       100                                                                                                                                                                                       ;3、是不是这样传递参数?<BR>                       )<BR>       )<BR>       (vlax-release-object a)<BR>       (princ re)<BR>       (princ)<BR>)


<BR>运行提示                                       错误: Automation 错误。 加载应用程序时出现问题


<BR>附VBA帮助中关于GetInterfaceObject说明<BR>Accepts a program ID and attempts to load it into AutoCAD as an in-process server.


RetVal = object.GetInterfaceObject(ProgID)


Object<BR>Application<BR>The object or objects this method applies to.


ProgID<BR>String; input-only<BR>The program ID of the interface object to return.


RetVal<BR>Object<BR>The interface object matching the program ID.


Example中ProgID给了个令人摸不着头脑的例子<BR>Dim poly As Object<BR>                       Set poly = ThisDrawing.Application.GetInterfaceObject("Polycad.Application")





我的QQ:10824256

laoliu09 发表于 2005-3-31 11:27:00

我不大懂lisp,但为什么不用vba调用你的dll呢?如下:


Public Declare Function        Addone Lib "MyDll" (i As integer) As Integer

lazybones 发表于 2005-3-31 13:09:00

又见老六 :)


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


另外,VBA调用DLL用不用先注册呀,调用时不涉及到DLL文件完整的文件名吗?DLL文件放到哪?与DVB同一个文件夹?AutoCAD支持路径?还是windows/system?
页: [1]
查看完整版本: [VBA]呼唤凭栏拭雪!如何调用Delphi编写的DLL?