我已用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'
解决方案 »
- 在没有装delphi 的电脑上运行程序报错
- 如何在一个容器(如:panel)内动态添加一个动态对象(如:button_x)?
- 我是菜鸟,寻求网络兼职delphi技术顾问,有请delphi高手进入。
- recordset的问题
- 这是什么控件?在那有下载?
- 一个超菜的问题:怎么在DELPHI里增加控件?来者有分!
- 当把鼠标放在EDIT上然后出现一个黄色的小提示是怎么做的,怎么把中文写在提示里面
- 有关F1book6的问题:如果焦点没有离开正在编辑的单元格,则其中的内容没有被承认,怎么解决这个问题?
- 各位大虾,哪里有installshield express custom for delphi下载,急急
- 有关文件存储格式的问题(一位站在门槛上的。。。)
- 如何采用多线程(或其它)方法解决当某断程序持续时间长时界面无法更新的问题?
- 急问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;