一个VC写的dll中的函数,声明如下:
WORD SLE4442_ReadPWD(
BYTE *_bPWD
);
参数
_bPWD
字符型指针,指向从卡片内读到的密码并返回给应用程序。在HEXADECIMAL模式下,应用程序应确保在调用此函数前,已分配给_bPWD指针至少3个字节的空间;在ASCIISTRING模式下,应确保已分配给_bPWD指针至少6个字节的空间。 WORD MCS_SetStringMode(
BYTE _bStringMode,
);
参数
_bStringMode
设置随后操作的字符串传递方式: 常量 值 含义
HEXADECIMAL 0 16进制字符串
ASCIISTRING 1 ASCII字符串
我的程序:function MCS_SetStringMode(_StringMode: BYTE): WORD;
stdcall; external 'MCS_SR.DLL';function SLE4442_ReadPWD( _bPWD:PChar): WORD;
stdcall; external 'MCS_SR.DLL';procedure TForm1.Button5Click(Sender: TObject);
var
Pass:pchar;
S:string;
begin
Pass:=StrAlloc(4*sizeof(Char)); case MCS_SetStringMode(0) of
0: Showmessage('设置成功!');
else Showmessage('设置失败!');
end; case SLE4442_ReadPWD(Pass) of
0: begin
Showmessage('密码读取成功!');
S:=Pass;
StrDispose(Pass);
Label1.Caption:=S;
end;
else Showmessage('密码读取失败!');
end;
end;程序运行后函数都能返回0,说明调用成功,但读出来的密码是'',请高手指教,万分感谢!
WORD SLE4442_ReadPWD(
BYTE *_bPWD
);
参数
_bPWD
字符型指针,指向从卡片内读到的密码并返回给应用程序。在HEXADECIMAL模式下,应用程序应确保在调用此函数前,已分配给_bPWD指针至少3个字节的空间;在ASCIISTRING模式下,应确保已分配给_bPWD指针至少6个字节的空间。 WORD MCS_SetStringMode(
BYTE _bStringMode,
);
参数
_bStringMode
设置随后操作的字符串传递方式: 常量 值 含义
HEXADECIMAL 0 16进制字符串
ASCIISTRING 1 ASCII字符串
我的程序:function MCS_SetStringMode(_StringMode: BYTE): WORD;
stdcall; external 'MCS_SR.DLL';function SLE4442_ReadPWD( _bPWD:PChar): WORD;
stdcall; external 'MCS_SR.DLL';procedure TForm1.Button5Click(Sender: TObject);
var
Pass:pchar;
S:string;
begin
Pass:=StrAlloc(4*sizeof(Char)); case MCS_SetStringMode(0) of
0: Showmessage('设置成功!');
else Showmessage('设置失败!');
end; case SLE4442_ReadPWD(Pass) of
0: begin
Showmessage('密码读取成功!');
S:=Pass;
StrDispose(Pass);
Label1.Caption:=S;
end;
else Showmessage('密码读取失败!');
end;
end;程序运行后函数都能返回0,说明调用成功,但读出来的密码是'',请高手指教,万分感谢!
解决方案 »
- 求uru4000b biokey能用的开发包
- 怎样获得驱动程序的路径?
- 我写了一个动态库,调用时,遇到 exit, 为什么整个窗体都关闭呀?郁闷死了
- ado 发什么疯了?????
- 低价发行,免费试用,助手医院信息管理系统(中小医院专用),详情请进!
- TCP可以实现两个不同局域网间传送大文件吗?
- 这个问题谁会???????
- 在界面上的控件如Edit控件,要用鼠标来自由拖动,一般采用什么做法比较合适
- 关于终结进程的有难度的问题:如何终结无法终结的进程?详情看内容!绝对不是哗众取宠!
- .NFO文件是什么东西。
- Delphi里面有指针的概念吗?
- 无法为更新定位,一些值可能已在最后一次读取后更新(tadoquery)
应该是function SLE4442_ReadPWD(var _bPWD:PChar): WORD
这样才能把_bPWD的值带出来
procedure TForm1.Button5Click(Sender: TObject);
var
Pass:pchar;
S:string;
begin
Pass:=StrAlloc(4*sizeof(Char));
SetLength(S, 4); case MCS_SetStringMode(0) of
0: Showmessage('设置成功!');
else Showmessage('设置失败!');
end; case SLE4442_ReadPWD(Pass) of
0: begin
Showmessage('密码读取成功!');
Move(Pass^, S[1], 4);
StrDispose(Pass);
Label1.Caption:=S;
end;
else Showmessage('密码读取失败!');
end;
end;
[Error] Unit1.pas(52): Identifier expected but '^' found
还请多帮帮忙,分不够可再加。
function SLE4442_ReadPWD(var _bPWD:p): WORD
就没问题了
HEXADECIMAL 0 16进制字符串
ASCIISTRING 1 ASCII字符串
case MCS_SetStringMode(0) of
是不是这里的问题?
试试这两种
case SLE4442_ReadPWD(@Pass) of
0: begin
Showmessage('密码读取成功!');
S:=Pass;
StrDispose(Pass);
Label1.Caption:=S;
end;
else Showmessage('密码读取失败!');
end;
把指针地址传入
或者
case SLE4442_ReadPWD(Pass^) of
把指针所指向的内存地址传入
函数是这样定义吗?
function SLE4442_ReadPWD( _bPWD:PChar): WORD;
stdcall; external 'MCS_SR.DLL';原来的是这个:
WORD SLE4442_ReadPWD(
BYTE *_bPWD
);to all: 请问'$30303030'是什么值(我调试的时候pass的值)
PASS的值是地址
你调用时把实际的内存地址传入就是第二种方法了
C的指针和PASCAL的指针有所不同
function SLE4442_ReadPWD( _bPWD:PChar): WORD;
stdcall; external 'MCS_SR.DLL'; _bPWD是定义成PChar,还是定义成指针,定义成指针应该怎样定义?麻烦了,多谢!请再帮帮忙,我想应该是可以用的.
在VFP中都可以用,在DELPHI中也应该能用的.
WORD SLE4442_ReadPWD(
BYTE *_bPWD
);
参数
_bPWD
字符型指针,指向从卡片内读到的密码并返回给应用程序。在HEXADECIMAL模式下,应用程序应确保在调用此函数前,已分配给_bPWD指针至少3个字节的空间;在ASCIISTRING模式下,应确保已分配给_bPWD指针至少6个字节的空间。 WORD MCS_SetStringMode(
BYTE _bStringMode,
);
参数
_bStringMode
设置随后操作的字符串传递方式: 常量 值 含义
HEXADECIMAL 0 16进制字符串
ASCIISTRING 1 ASCII字符串
我的程序:
type pbyte=^byte
function MCS_SetStringMode(_StringMode: BYTE): WORD;
cedcl; external 'MCS_SR.DLL';function SLE4442_ReadPWD( _bPWD:pbyte): WORD;
cedcl; external 'MCS_SR.DLL';procedure TForm1.Button5Click(Sender: TObject);
var
Pass:pchar;
S:string;
begin
Pass:=StrAlloc(4*sizeof(Char)); case MCS_SetStringMode(0) of
0: Showmessage('设置成功!');
else Showmessage('设置失败!');
end; case SLE4442_ReadPWD(Pass) of
0: begin
Showmessage('密码读取成功!');
S:=Pass;
StrDispose(Pass);
Label1.Caption:=S;
end;
else Showmessage('密码读取失败!');
end;
end;