1、接口声明
//-------------------------------------------------------------------
// 功能:
// 连接读卡器
//
// 返回:
// TRUE:成功 FALSE:失败
//
//  参数:
// HANDLE &hFlashDisk 返回连接后的读卡器句柄(hFlashDisk初值为NULL)
// DWORD dwIndex 读卡器的索引号(0开始)
//
//  说明:
// 如果hFlashDisk不为NULL, 则直接返回NULL
//-------------------------------------------------------------------
BOOL OpenUDisk(HANDLE &hFlashDisk, int Index = 0);2、delphi声明和调用如下:
  hCommDev:Pointer;         //端口句柄,全局变量
    //打开串口
function OpenUDisk(fhdisk:Pointer;Index:Integer):Boolean;cdecl; //
  external 'TYInterface.dll'; if OpenUDisk(hCommDev,0) then
    begin
      Memo1.Lines.Add('打开成功');    end
    else
    begin
      Memo1.Lines.Add('打开失败');
    end;现在的问题是,当我无论如何声明参数,都报错,请问&hFlashDisk 应该声明什么类型好?问题出在哪里?

解决方案 »

  1.   

    function OpenUDisk(var fhdisk:Pointer;Index:Integer):Boolean;cdecl;   external 'TYInterface.dll';
    试试
      

  2.   

    试试看 function OpenUDisk(var fhdisk: handle;Index: Integer): Boolean;
      

  3.   

    关键是要用var
      

  4.   


    HANDLE &hFlashDisk = 
      hFlashDisk: PHandle 或者 PCardinal,PDWORD 
    HANDLE & 是一个指向32位无符号的指针,具体就是设备句柄指针
      

  5.   

    谢谢各位的关注,这些方法都试过了,我在看看,是哪里出了问题,今天无法解决,明天只有找些DLL的人了,杯具了
      

  6.   

    把错误信息贴出来,我估计是动态库中的函数名的问题,用depends看一下,要不把该函数的C头文件贴出来看看。
      

  7.   

    找个DLL看看结构吧,
    这样会学习的很快的
      

  8.   

    function OpenUDisk(fhdisk:PHandle; Index: Integer):Boolean;cdecl;  external 'TYInterface.dll';
    function OpenUDisk(fhdisk:PHandle; Index: Integer=0):Boolean;cdecl;  external 'TYInterface.dll';
    感觉上也就两种写法了。
    我感觉需要注意的地方就是cdecl这里,因为看不到你的c的定义源码,到底是cdecl,还是stdcall需要进一步的确认。调用的时候
    var
      hCommDev:Thandle; 
    begin
      OpenUDisk(@hCommDev,0)
    end;