请问如何调用vb的Dll????????????????????????????????????????????????????????????(50分)

  • 主题发起人 主题发起人 autocar
  • 开始时间 开始时间
A

autocar

Unregistered / Unconfirmed
GUEST, unregistred user!
请问如何调用vb的Dll????

我编写的过程如下:

在vb6中建立一个ActiveX dll 工程

在类class的name属性改为datediff

在类中添加如下代码:

Public Function GetDiff(ByVal date1 As String, ByVal date2 As String) As Integer

GetDiff = datediff("n", date1, date2)


End Function


--------------------------------------------------------------------------------

把这个dll编译成 datediff.dll 并放在D盘


---------------------------------------------------------------------------------

在delphi 中 添加如下代码:


......
......
.....
....


var
Form1: TForm1;

implementation

{$R *.dfm}

function GetDiff(date1:string;date2:string):integer;stdcall ; external 'd:/datediff.dll';




procedure TForm1.Button1Click(Sender: TObject);

begin
label1.Caption:=inttostr( GetDiff('12:00','14:34'));
end;

end.

运行时出错,出错提示为无法定位程序输入点getdiff于动态链接库d:/datediff.dll上.


请问怎样解决????? 谢谢!!!!!!!
 
VB做的DLL是不能这样调用的。
 
大小写要注意
还有VB中的类方法 这样调用好像是不行
我是这样调用的 你试试看:
在Project->import type Library
Add(you dll)
会导出一个unit
uses
Comobj,
PrjXue_TLB; //导出的unit
var
XueRs:_xueRS;
{定义接口类 实例}
try
xueRS:=CreateComObject(CLASS_xueRS) as _xueRS;
except
on e:exception do
begin
showmessage(e.Message);
exit;
end;
end;
//调用方法
returnval:=xueRS.LAIcal(crop,Rfldata,LAI);

方法二:


//定义TxueRs类的子类
TmyTest=class(TxueRS)
private
//Function LAIcal(Crop: OleVariant; Rfldata: OleVariant; var LAI: OleVariant): Integer;override;
//Function LAIcal(Crop: OleVariant; Rfldata: OleVariant; var LAI: OleVariant): Integer;
Procedure Justtest;
end;

procedure TmyTest.Justtest;
begin
showmessage('hello');
end;

procedure TForm1.Button8Click(Sender: TObject);
var
Crop,Rfldata,LAI:oleVariant;
intcrop,returnval:integer;
begin
{给接口的元素初始化和赋值}
intcrop:=1;
crop:=intcrop;

Rfldata:=vararraycreate([0,0,0,1],vardouble);

Rfldata[0,0]:=9; //0.15;
Rfldata[0,1]:=25;
LAI:=vararraycreate([0,0],varvariant);{定义输出空间}

returnval:=(Tmytest.Create(self)).LAIcal(crop,Rfldata,LAI);
if returnval=0 then
begin
showmessage(vartostr(LAI[0]))
end


end;

procedure TForm1.Button9Click(Sender: TObject);
begin
(Tmytest.Create(self)).Justtest;
end;
 
呵呵!
VB的DLL不是正真的DLL,它只是一个进程内Com
要在Delphi中调用的话,
必须先用Regsvr32注册
然后在Delphi中用处
CreateOleObject创建这个Com
 
多人接受答案了。
 
后退
顶部