dll中提供了一个函数,说明如下:
函数名称:IC_GetCertificate
函数功能:返回IC卡中用户证书中单个项。
格式:int IC_GetCertificate([out]BYTE ItemCode[],[out]char *ItemOper)
参数说明:           BYTE ItemCode [] 技术监督局企业代码
  char * ItemOper 企业操作员号
现在有几个问题;
1.这个dll是用c(或者是vc)写的,现在要在delphi中调用,我是这么写的,
function IC_GetCertificate(ItemCode: byte;ItemOper: pChar): integer; stdcall;external 'AbcmmcApi.dll';  是否正确?类型我分别用的byte类型和pChar类型
2.里面有两个参数ItemCode和ItemOper,前面标明是out,应该是传出的意思,那我实际调用的时候需要这个ItemCode(技术监督局企业代码)和ItemOper(企业操作员号)的时候,如何获得他们的值?我一开始是这么写,但是问题多多,请帮我看看!//bow  3Q{----------------------------------------------------
函数功能:获取ic卡中的企业编码
返回值:0 成功 其它失败
----------------------------------------------------}
function IC_GetEpCode(psEpCode: pChar): integer;
var
  sTmp:string;
  pCode:pchar;
  n:integer;
begin
  pCode:=psEpCode;
  Result:=IC_GetCertificate(ItemCode,ItemOper);
  if Result = 0 then
  begin
    sTmp:=VarToStr(ItemCode);
    StrCopy(pCode,pchar(sTmp));
    n:=length(sTmp);
    zeroMemory(pCode+n,1);
  end;
end;{----------------------------------------------------
函数功能:获取ic卡中的操作员编码
返回值:0 成功 其它失败
----------------------------------------------------}
function IC_GetOpCode(psOpCode: pChar): integer;
var
  sTmp:string;
  pCode:pchar;
  n:integer;
begin
  pCode:=psOpCode;
  Result:=IC_GetCertificateInfo(ItemCode,ItemOper);
  if Result = 0 then
  begin
    sTmp:=VarToStr(ItemOper);
    StrCopy(pCode,pchar(sTmp));
    n:=length(sTmp);
    zeroMemory(pCode+n,1);
  end;
end;

解决方案 »

  1.   

    function IC_GetCertificate(var ItemCode: array of byte;var ItemOper: pChar): integer; stdcall;external 'AbcmmcApi.dll';  
    这样就好了
      

  2.   

    function IC_GetCertificate(ItemCode: pByte;ItemOper: pChar): integer; stdcall;external 'AbcmmcApi.dll';注意ItemCode和ItemOper在调用前要分配内存,调用完,使用后要释放内存
      

  3.   

    to: xiaocha(小查) 
    谢谢,我改过来了.
    还有一些疑问:
    1.如何分配内存,释放内存?
    2.能帮我看看上面写的两个函数吗?错误太多了,能帮我挑几个吗?
    3.一直搞不清变量类型前面加p和不加p的区别  比方pbyte和byte  pchar和char...谢谢!!
      

  4.   

    1 用 New 和 Dispose 或 GetMem 和 FreeMem
    2 ItemCode: PByte;
      ItemOper: PChar;
      GetMem(ItemCode,100);
      GetMem(ItemOper,100);
      n = IC_GetCertificate(ItemCode,ItemOper);
      ...
      FreeMem(ItemCode);
      FreeMem(ItemOper);
    3 加p,表示指针