该dll采用结构体传递参数
为了将对模块的操作简单化。动态链接库中所有的函数的参数均通过一个结构体(ZT)来传递。现将该结构体及有关函数说明如下:
    struct ZT
    {
    long lIndex;          /*模块索引值,该值在安装时被系统分配*/
    HANDLE hHandle;       /*模块的操作句柄(只有涉及中断时才用)*/
    short nCh;            /* 通道号*/
    long  lData;          /*输入输出数据变量*/
        long* plData;         /*输入输出数据指针*/
    long  lCode;          /*设备控制字,具体含义见函数说明*/        
     }; 打开设备:
       函数:__declspec(dllexport)  long _stdcall OpenUSB7kC(ZT_USBBOARD* bs)
       功能:打开某一模块 
       入口有效参数:lIndex   模块索引值
       出口返回参数:hHandle  模块的操作句柄(只有涉及中断时,返回才有意义)
       返回值:  0   打开设备成功
                 -1  打开设备失败我是菜鸟,请各位大侠不吝赐教!急等!
最好有代码!

解决方案 »

  1.   

    TZT = package record
        lIndex: LongInt;
        hHandle: THandle;
        nCh: SmallInt;
        lData: LongInt;
        plData: PLongInt;
        lCode: LongInt;
      end;
      PZT = ^TZT;
      

  2.   

    function OpenUSB7kC(bs: PZT): integer;stcall; external 'xxx.dll';
      

  3.   

    function OpenUSB7kC(bs: PZT): integer;stcall; external 'xxx.dll';
      

  4.   

    zwb666(zwb) ,你敢调试老大呀?当心他封你号!
      

  5.   

    To:aiirii(ari-爱的眼睛)老大我真的很菜,不知道该把这个东东放在哪里?是要type的吗?
    老大能不能在详细一点点呢?谢谢谢谢了。这个类和DLL中的结构体有什么联系呢?
      

  6.   

    而且,我在调用OpenUsb7kc函数时,编译总是说我参数不对。请指点!
      

  7.   

    TZT = package record
        lIndex: LongInt;
        hHandle: THandle;
        nCh: SmallInt;
        lData: LongInt;
        plData: PLongInt;
        lCode: LongInt;
      end;
      PZT = ^TZT;放哪了
    要不不会编译不过的
      

  8.   

    他意思是说DLL这样写
    interfaceuses ...;
    type
    TZT = package record
        lIndex: LongInt;
        hHandle: THandle;
        nCh: SmallInt;
        lData: LongInt;
        plData: PLongInt;
        lCode: LongInt;
      end;
      PZT = ^TZT;implementationfunction OpenUSB7kC(bs: PZT): integer;stcall;  export;
      

  9.   

    各位老大,我的意思是DLL已经是别人写好的了,包括这个ZT结构体都在那个DLL里。我只是不知道该怎么在我的程序里调用他们,请指教To:hsmserver(撒哈拉之雨的悲伤),我把他放在uses了,可是不行。放在var时编译不报错了,只是不知道对不对!
    而且我在用这个函数的时候参数应该怎么写呢?在程序里声明一下当作类使用吗?它和DLL里的那个结构体有什么关系呢?
      

  10.   

    你的程序代碼最上面:
    type
      //------這裹
      TForm1 = class(TForm)放入:
    TZT = package record
        lIndex: LongInt;
        hHandle: THandle;
        nCh: SmallInt;
        lData: LongInt;
        plData: PLongInt;
        lCode: LongInt;
      end;
      PZT = ^TZT;implementation
      //--------------這裹
    {$R *.dfm}放入:
    function OpenUSB7kC(bs: PZT): integer;stcall; external 'xxx.dll';
      

  11.   

    'xxx.dll'; 中的xxx要改成你的dll名字
      

  12.   

    To:aiirii(ari-爱的眼睛)编译通过了,谢谢!可是在调用的时候,参数怎么给呀?指针类型吗?
    老大给个实例吧
      

  13.   

    函数声明Ari已经说明了。你了解这个函数的功能吗,传入的参数是否是用来得到值的,如果的是话:
    var ZT:TZT;
    begin
      .....//或者这里应该给ZT赋某些域的值
      OpenUSB7kC(@ZT): //调用函数后,ZT就获得了值了。
    end;
      

  14.   

    如果不是,只是当成参数传递,就声明一个指针类型,再分配内存,赋值,传入。Var P:PZT;
    begin
      GetMem(p,Sizeof(TZT));
      P^.lIndex:=......
      P^............
      OpenUSB7kC(P):
      ......
      FreeMem(P); 
    end;