代码如下:
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;请高手指教啊。。

解决方案 »

  1.   

    TCalcProc=function(D_its:integer;p:char;arr:TArr):integer;stdcall;
    定义成试试
    TCalcProc=function(D_its:integer;p:char;var arr:TArr):integer;stdcall;
      

  2.   

    不行啊
    @c:=Calc_ITS(30,'A',c);
    说左边不能被赋值
      

  3.   

    procedure TForm1.Button1Click(Sender: TObject);
    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]