VC++的DLL文件中的代码为:
extern "C" __declspec( dllexport ) void MarkPoints( double* pDPts, int iPtCount ) 
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CLsrEllipseApp *pApp = ( CLsrEllipseApp* )AfxGetApp();
pApp->MarkPoints( pDPts, iPtCount );
}
我在Delphi中这样使用的,但编译时出了问题;
procedure TMainInterface.Button1Click(Sender: TObject);
var
 pDPts:array[0..11] of double;
 pDouble:^double;  type MarkPoints=procedure (pDouble:double; iPtCount:integer);cdecl;
begin   pDPts[0]:=1;
   pDPts[1]:=2;
   pDPts[2]:=3;
   pDPts[3]:=4;
   pDPts[4]:=5;
   pDPts[5]:=6;
   pDPts[6]:=7;
   pDPts[7]:=8;
   pDPts[8]:=9;
   pDPts[9]:=10;
   pDPts[10]:=11;
   pDPts[11]:=12;pDouble := @pDPts;
MarkPoints( pDPts, 12 ); end;
错误信息:
expected but ','found!!请大家帮帮我~~~~~~~~~~谢谢

解决方案 »

  1.   

    procedure TMainInterface.Button1Click(Sender: TObject);
    var
      pDPts:array[0..11] of double;type MarkPoints=procedure (pDPts: PDouble; iPtCount: Integer); cdecl;begin
       pDPts[0]:=1;
       pDPts[1]:=2;
       pDPts[2]:=3;
       pDPts[3]:=4;
       pDPts[4]:=5;
       pDPts[5]:=6;
       pDPts[6]:=7;
       pDPts[7]:=8;
       pDPts[8]:=9;
       pDPts[9]:=10;
       pDPts[10]:=11;
       pDPts[11]:=12;   MarkPoints(@pDPts, 12);
    end;
      

  2.   

    上面的写法是动态调用DLL函数, 不过不完整。下面是静态调用DLL函数的代码:procedure MarkPoints(pDPts: PDouble; iPtCount: Integer); cdecl; external "XXX.dll';procedure TMainInterface.Button1Click(Sender: TObject);
    var
      pDPts:array[0..11] of double;begin
       pDPts[0]:=1;
       pDPts[1]:=2;
       pDPts[2]:=3;
       pDPts[3]:=4;
       pDPts[4]:=5;
       pDPts[5]:=6;
       pDPts[6]:=7;
       pDPts[7]:=8;
       pDPts[8]:=9;
       pDPts[9]:=10;
       pDPts[10]:=11;
       pDPts[11]:=12;   MarkPoints(@pDPts, 12);
    end;
      

  3.   

    定义有错误,type MarkPoints=procedure (pDouble:^double; iPtCount:integer);stacall;
    pDouble就是指针
      

  4.   

    大哥  我按你说的方法写出来 编译的时候一样的出现错误啊错误信息:expected but ','found!!
      

  5.   

    MarkPoints是类型不是方法type MarkPoints=procedure (pDPts: PDouble; iPtCount: Integer); cdecl;改称 MarkPoints: procedure (pDPts: PDouble; iPtCount: Integer); cdecl;
      

  6.   

    procedure MarkPoints(pDouble:double; iPtCount:integer);cdecl;external "test.dll";procedure TMainInterface.Button1Click(Sender: TObject);
    var
     pDPts:array[0..11] of double;
    begin
       pDPts[0]:=1;
       pDPts[1]:=2;
       pDPts[2]:=3;
       pDPts[3]:=4;
       pDPts[4]:=5;
       pDPts[5]:=6;
       pDPts[6]:=7;
       pDPts[7]:=8;
       pDPts[8]:=9;
       pDPts[9]:=10;
       pDPts[10]:=11;
       pDPts[11]:=12;
       MarkPoints(@pDPts[0], 12 );
    end;