int CVR_Scan (int ScanType,int ScanMode, int iDirect,IDCARD_ALL *PIDCARD); *PIDCARD 是一个结构体的指针 typedef struct 

char name[40]; 
char sex[10];    
char people[20]; 
}IDCARD_ALL; 
这是C++编写的一个DLL文件的函数; 
我要怎么写才能在DELPHI里面调用啊 
我在程式里
type
  IDCARD_ALL =record
    sname: Array[0..39] of Char;
    sex: Array[0..9] of Char;
    people: Array[0..19] of Char;
   end;
   TIDCARD_ALL= IDCARD_ALL;
   PIDCARD_ALL= ^IDCARD_ALL;
   function CVR_Scan(ScanType,ScanMode,iDirect:Integer;PIDCARD:PIDCARD_ALL):Integer; cdecl; external 'CVR100ZSDK.dll';var
  MyIDCARD:IDCARD_ALL;
  PMyIDCARD:PIDCARD_ALL;
在窗体生成的时候 执行 pMyIDCARD:=@MyIDCARD;
执行 CVR_Scan(1,0,1,PMyIDCARD)=0 就报地址错误。这个折腾了我几天了,高手帮帮忙

解决方案 »

  1.   

    IDCARD_ALL =packed record 
        sname: Array[0..39] of Char; 
        sex: Array[0..9] of Char; 
        people: Array[0..19] of Char; 
      end; 
      

  2.   

    这样试试:
    function CVR_Scan(ScanType, ScanMode, iDirect: Integer; PIDCARD: PIDCARD_ALL): Integer; stdcall; external 'CVR100ZSDK.dll';
      

  3.   

    cdecl stdcall 都试过了 没有用 错误信息是读取一个DLL文件 报了一个内存地址的错误
      

  4.   

    是不是dll的位置不对呀,动态加载试试?
      

  5.   

    这是另外一个函数  function CVR_ReadIDCard(pIDCARD_RD:PIDCARD_READ): Integer; stdcall; external 'CVR100ZSDK.dll';  _IDCARD_READ=Record
        INF_NAME    :array [0..29] of char;
        INF_SEX     :array [0..3] of char;
        INF_NATION  :array [0..9] of char;
      end;
      TIDCARD_READ= _IDCARD_READ;
      PIDCARD_READ= ^TIDCARD_READ;
    var
      MyIDCARD_RD:TIDCARD_READ;
      pMyIDCARD_RD:PIDCARD_READ;做法都是一样的 这个就能执行。
      

  6.   

    这是一个比较特殊的结构体,字符个数,可能会因编译器的不同而有所差别.
    正常情况下应该是70字节,即压缩存储的.建议为防止可能存在的结构大小,最好增加两个字节:
      IDCARD_ALL =record 
        sname: Array[0..39] of Char; 
        sex: Array[0..9] of Char; 
        people: Array[0..19] of Char;
        reserved: array[0..1] of char; 
      end; 
      

  7.   

    access violation at address 005227cF in module 'MSMFC.dll'.read of address 0000028这是报错信息。接口是'CVR100ZSDK.dll'
      

  8.   

    Dll 函数的 入口地址没有找对,对那样的错误。
      

  9.   

    是内存字节对齐问题。你的C编译器和Delphi编译器默认对齐方式可能不一样,导致内存访问越界。都改成单字节对齐的应该就行了,Delphi的要加Packed。具体看帮助吧。