我已用regsrv32将dll注册,接着定义卡结构
interface
// 接口定义 接口名称IRWCard
//接口IID {2DD111A-3EC9-4EFE-AFCD-B9FF66EB3456}
//组件名称 CardCOM
type
IRWCard = interface(IDispatch)
['{2DD111A-3EC9-4EFE-AFCD-B9FF66EB3456}']
function Read(out Data:OleVariant):WordBool; safeCall;
//function SetPort(AportID:Byte):WordBool; safeCall;
end;
//定义卡结构
Type TDataRec = record
CardCode: Byte;
CorpCode: Word;
CustID: LongWord;
SumBuy: LongWord;
Param1: Byte;
Param2: Byte;
Param3: Byte;
Param4: Byte;
Param5: Byte;
Param6: Byte;
Param7: Byte;
end;
之后,后来调用读方法:
procedure TfrmReadCard.btnWrCardClick(Sender: TObject);
//const
//IID_IMalloc: TGUID = '{2DD1EE3A-3EC9-4F5E-A9CD-B98366EB3456}';
var
MCard :OleVariant;
CustID: OleVariant;
iter: IRWCard;
begin
// iter := CreateComObject(IID_IMalloc);
// IRWCard.SetPort(4);
MCard:=iter.Read(CustID); //Memo1.Lines.Add(MCard);
end; 提示错误
read Of address '00000000'
interface
// 接口定义 接口名称IRWCard
//接口IID {2DD111A-3EC9-4EFE-AFCD-B9FF66EB3456}
//组件名称 CardCOM
type
IRWCard = interface(IDispatch)
['{2DD111A-3EC9-4EFE-AFCD-B9FF66EB3456}']
function Read(out Data:OleVariant):WordBool; safeCall;
//function SetPort(AportID:Byte):WordBool; safeCall;
end;
//定义卡结构
Type TDataRec = record
CardCode: Byte;
CorpCode: Word;
CustID: LongWord;
SumBuy: LongWord;
Param1: Byte;
Param2: Byte;
Param3: Byte;
Param4: Byte;
Param5: Byte;
Param6: Byte;
Param7: Byte;
end;
之后,后来调用读方法:
procedure TfrmReadCard.btnWrCardClick(Sender: TObject);
//const
//IID_IMalloc: TGUID = '{2DD1EE3A-3EC9-4F5E-A9CD-B98366EB3456}';
var
MCard :OleVariant;
CustID: OleVariant;
iter: IRWCard;
begin
// iter := CreateComObject(IID_IMalloc);
// IRWCard.SetPort(4);
MCard:=iter.Read(CustID); //Memo1.Lines.Add(MCard);
end; 提示错误
read Of address '00000000'
解决方案 »
- 新人求教,如何在两个表里求最大值和不同值。
- 如何读取LZW压缩的TIF图像?
- 我在窗体上动态创建了一个IMAGE控件,并且加载了一幅图片,现在要在该控件的双击事件中完成某些功能,怎样写这幅图片的双击事件?
- 斑竹不要删除!我要招聘一个编程人员!谢谢!我实在找不到合适的!没有办法!鼠下留情!
- 网络编程高手,在线请教
- delphi控制SQL Server数据恢复的问题!(三层结构〉〉客户端恢复疑问?)
- 奇怪的基础问题-关于Tform的一个frm实例{☆进则有分}
- 怎样才不留有DELPHI痕迹?
- 我有如何将多个文件合并到一个EXE文件,然后这个EXE运行后又可以生成这些文件的代码.
- 关于虚拟现实编程(vrml)
- 如何采用多线程(或其它)方法解决当某断程序持续时间长时界面无法更新的问题?
- 急问EXCEL问题
procedure TfrmReadCard.btnWrCardClick(Sender: TObject);
var
MCard :OleVariant;
CustID: OleVariant;
iter: IRWCard;
begin
MCard:=iter.Read(CustID);
end;发现CustID的地址总是为0
还是同样的错误!
可以使用函数了,uses RWCardCom_TLB就可以;以下是我的读卡程序:
procedure TfrmMakeCard.btnReadCardClick(Sender: TObject);
var
CardCode: OleVariant;
CustID: OleVariant;
CardInfo: TDataRec;
Iner: IRWCard;
begin
Iner:=CoPortObject.Create;
if Iner.SetPort(0) then //监测是否是端口COM1,如果是就返回true,否则调用getErrorInfo失败的原因
begin
if Iner.Read(CardCode)=True then
begin
memo1.Lines.add(CardCode);//将卡数据显示在memo1中,卡数据为长度56位16进制字符串!
end
else
Iner.GetErrorInfo;
end
else
Iner.GetErrorInfo;
end;