代码如下:
VC DLL:
int xs,area;
void SelConst(char p) //确定换算系数和计算面积
{
switch (p)
{
case 'A':xs=1;area=22500;break;
case 'B':xs=2;area=40000;break;
case 'C':xs=3;area=10000;break;
}
}extern "C" _declspec(dllexport) int *Calc(int D_its,char sort,int a[4])
{
SelConst(sort);
a[0]=a[0]*xs*1000/area;
a[1]=a[1]*xs*1000/area;
a[2]=a[2]*xs*1000/area;
a[3]=(a[0]+a[1]+a[2])/3;
if (a[3]>=D_its) a[4]=1;
else a[4]=0;
return a;
}
Delphi 调用代码procedure TForm1.Button1Click(Sender: TObject);
type
TArr=array[1..5] of integer;
TCalcProc=function(D_its:integer;p:char;arr:TArr):integer;stdcall;
Var
c:TArr;
Calc_ITS:TCalcProc;
Handle:THandle;
begin
Handle:=LoadLibrary('HNT.dll');
if Handle>0 then begin
@Calc_ITS:=GetProcAddress(Handle,PChar('Calc'));
if @Calc_ITS<>nil then
begin
c[1]:=5;
c[2]:=6;
c[3]:=5;
c[4]:=0;
c[5]:=0;
@c:=Calc_ITS(30,'A',c);//问题在这,怎么获取返回的数组啊?还是函数定义的问题? Edit4.text:=IntToStr(c[1]);
end
else
ShowMessage('DLL函数没找到')
end else
ShowMessage('DLL调用失败');
FreeLibrary(Handle);
end;请高手指教啊。。
VC DLL:
int xs,area;
void SelConst(char p) //确定换算系数和计算面积
{
switch (p)
{
case 'A':xs=1;area=22500;break;
case 'B':xs=2;area=40000;break;
case 'C':xs=3;area=10000;break;
}
}extern "C" _declspec(dllexport) int *Calc(int D_its,char sort,int a[4])
{
SelConst(sort);
a[0]=a[0]*xs*1000/area;
a[1]=a[1]*xs*1000/area;
a[2]=a[2]*xs*1000/area;
a[3]=(a[0]+a[1]+a[2])/3;
if (a[3]>=D_its) a[4]=1;
else a[4]=0;
return a;
}
Delphi 调用代码procedure TForm1.Button1Click(Sender: TObject);
type
TArr=array[1..5] of integer;
TCalcProc=function(D_its:integer;p:char;arr:TArr):integer;stdcall;
Var
c:TArr;
Calc_ITS:TCalcProc;
Handle:THandle;
begin
Handle:=LoadLibrary('HNT.dll');
if Handle>0 then begin
@Calc_ITS:=GetProcAddress(Handle,PChar('Calc'));
if @Calc_ITS<>nil then
begin
c[1]:=5;
c[2]:=6;
c[3]:=5;
c[4]:=0;
c[5]:=0;
@c:=Calc_ITS(30,'A',c);//问题在这,怎么获取返回的数组啊?还是函数定义的问题? Edit4.text:=IntToStr(c[1]);
end
else
ShowMessage('DLL函数没找到')
end else
ShowMessage('DLL调用失败');
FreeLibrary(Handle);
end;请高手指教啊。。
定义成试试
TCalcProc=function(D_its:integer;p:char;var arr:TArr):integer;stdcall;
@c:=Calc_ITS(30,'A',c);
说左边不能被赋值
type
TArr=array[1..5] of integer;
PTArr=^Tarr;
TCalcProc=function(D_its:integer;p:char;arr:TArr):PTArr;stdcall;
Var
c:TArr;
p:PTArr;
Calc_ITS:TCalcProc;
Handle:THandle;
begin
Handle:=LoadLibrary('ttt1.dll');
if Handle>0 then begin
@Calc_ITS:=GetProcAddress(Handle,PChar('Calc'));
if @Calc_ITS<>nil then
begin
c[1]:=51;
c[2]:=6;
c[3]:=5;
c[4]:=0;
c[5]:=0;
p:=Calc_ITS(30,'A',c);//问题在这,怎么获取返回的数组啊?还是函数定义的问题? Edit4.text:=IntToStr(p^[1]);
end
else
ShowMessage('DLL函数没找到')
end else
ShowMessage('DLL调用失败');
FreeLibrary(Handle);
end;
其实,你的c传过去的就是地址,不用返回也可以,因为c[1]=p^[1]