[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 我不大懂lisp,但为什么不用vba调用你的dll呢?如下:
Public Declare Function Addone Lib "MyDll" (i As integer) As Integer 又见老六 :)
单位没装Delphi,没法验证,就我的DLL你能给个完整例子吗?
另外,VBA调用DLL用不用先注册呀,调用时不涉及到DLL文件完整的文件名吗?DLL文件放到哪?与DVB同一个文件夹?AutoCAD支持路径?还是windows/system?
页:
[1]