在VC中,调用dll的函数说明及调用过程如下:
typedef int (PASCAL *pgetname)(BYTE *buf);
typedef int (PASCAL *pUCmmand1)(BYTE *pcmd,int *p1,int *p2,int *p3);pUCmmand1 mygetcard;
pgetname myget;
void CReadCardDlg::OnTimer(UINT nIDEvent)
{
BYTE cmd;
int parg0,parg1,parg2;
parg0=1;
parg1=8811;
parg2=9986;
cmd=0x43;
int z=mygetcard(&cmd,&parg0,&parg1,&parg2);
if(z==62171)
{
parg0=1;
cmd=0x44;
parg1=8811;
char *x;
x="c:\\mycard";
int p[20];
memcpy(p,x,10);
mygetcard(&cmd,&parg0,&parg1,p);
myget(buffer);
AfxMessageBox((char *)buffer);
}
CDialog::OnTimer(nIDEvent);
} 以上调用如何用vb来实现?主要是下边的字符串地址传递问题,请教各位高手.
typedef int (PASCAL *pgetname)(BYTE *buf);
typedef int (PASCAL *pUCmmand1)(BYTE *pcmd,int *p1,int *p2,int *p3);pUCmmand1 mygetcard;
pgetname myget;
void CReadCardDlg::OnTimer(UINT nIDEvent)
{
BYTE cmd;
int parg0,parg1,parg2;
parg0=1;
parg1=8811;
parg2=9986;
cmd=0x43;
int z=mygetcard(&cmd,&parg0,&parg1,&parg2);
if(z==62171)
{
parg0=1;
cmd=0x44;
parg1=8811;
char *x;
x="c:\\mycard";
int p[20];
memcpy(p,x,10);
mygetcard(&cmd,&parg0,&parg1,p);
myget(buffer);
AfxMessageBox((char *)buffer);
}
CDialog::OnTimer(nIDEvent);
} 以上调用如何用vb来实现?主要是下边的字符串地址传递问题,请教各位高手.
解决方案 »
- VB有哪些可用的控件?
- 关于打印机是否正常工作的GetPrinter问题
- Windows 7下ActiveX控件注册问题
- 一个简单容易得分的问题
- 帮我把下面这段xml写回到access数据表里好吗?
- 关于jet和odbc打开有密码的Access数据库的疑问
- 最新 setup factory 问题!
- Fileds("area")为什么只是改写第一个,而不是全部?
- WIN2000下打印的纸张设置问题,真是头痛:(
- 菜鸟问题,请大家帮个忙
- 用FtpFindFirstFile查找一个文件,然后直接再用FtpFindFirstFile查找另一个文件,不行吗
- VBA中如何将combobox的值与SQL表中的某列值进行绑定?在线等,如解决,立刻结帖
Private Declare Function UCommand1 Lib "RdCard.dll" (ByRef pComd As Long, ByRef parg0 As Long, ByRef parg1 As Long, ByRef parg2 As Long) As Long调用第一次的指令,进行连接:
Dim result As Long
result = UCommand1(65, 0, 8811, 9986)
然后继续调用,进行读卡:
result = UCommand1(67, 0, 8811, 9986) '验卡
第三步,读卡信息,与mygetcard(&cmd,&parg0,&parg1,p)类似,在四个参数中,前三个可以固定,例如:
result = UCommand1(68, 1, 8811, ) '读卡信息
但是第四个参数需要传一个char*型的数据进去,如何实现?
传递data(0)的地址byval VarPtr(data(0))
result = UCommand1(68, 1, 8811, byval VarPtr(data(0)))