导航
  • 主页
  • 语言基础/算法/系统设计
  • 数据库相关
  • 图形处理/多媒体
  • 网络通信/分布式开发
  • VCL组件开发及应用
  • Windows SDK/API
  • 问答

dll调用的问题

highbury 2003-07-18 02:28:14
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;
...全文
4 点赞 收藏 4
写回复
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaocha 2003-07-18
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,表示指针
回复
highbury 2003-07-18
to: xiaocha(小查)
谢谢,我改过来了.
还有一些疑问:
1.如何分配内存,释放内存?
2.能帮我看看上面写的两个函数吗?错误太多了,能帮我挑几个吗?
3.一直搞不清变量类型前面加p和不加p的区别 比方pbyte和byte pchar和char...谢谢!!
回复
xiaocha 2003-07-18
function IC_GetCertificate(ItemCode: pByte;ItemOper: pChar): integer; stdcall;external 'AbcmmcApi.dll';

注意ItemCode和ItemOper在调用前要分配内存,调用完,使用后要释放内存
回复
李_军 2003-07-18
function IC_GetCertificate(var ItemCode: array of byte;var ItemOper: pChar): integer; stdcall;external 'AbcmmcApi.dll';
这样就好了
回复
发动态
发帖子
Delphi
创建于2007-08-02

4809

社区成员

Delphi 开发及应用
申请成为版主
社区公告
暂无公告