帮看下这个怎么一直报无法定位程序输入点 M1_card_data 于动态链接库 WatchReader.dll 上

guxinren521 2018-12-17 10:08:02
调用了一个DLL
帮看下这个怎么一直报无法定位程序输入点 M1_card_data 于动态链接库 WatchReader.dll 上


implementation
{$R *.dfm}
function M1_card_data(block_M1:Integer;key:string;keytype:Integer;data:string;error:string):integer;stdcall;
external 'WatchReader.dll';

procedure TForm1.Button1Click(Sender: TObject);
var
block_M1,temp,keytype:Integer;
key,data,error :string;
begin
block_M1:=StrToInt(Edit1.Text);
key:=Edit2.Text;
keytype:=0;
temp:=M1_card_data(block_M1,key,keytype,data,error);
mmo1.Lines.Add(data);
end;


[code=csharp]int __stdcall M1_card_read_data(int block_M1,char* key,int keytype, char* data,char* error);


/*======================================================================//
M1_card_read _data返回值(0:函数执行成功;-1:函数执行失败)
参数说明:
block_M1:读取块号,类型为int,
key:校验密码,类型为char*
keytype:0代表keya,2代表keyb,类型为int
data:读取指定块号内的数据类型为char*
error:错误信息,读取过程中出现的错误,类型为char*

/*======================================================================//
...全文
102 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
doloopcn 2018-12-17
  • 打赏
  • 举报
回复
SDK中写的是:
[code=csharp]int __stdcall M1_card_read_data(int block_M1,char* key,int keytype, char* data,char* error);
/*======================================================================//
M1_card_read _data返回值(0:函数执行成功;-1:函数执行失败)
参数说明:
block_M1:读取块号,类型为int,
key:校验密码,类型为char*——这要看SDK的版本是ANSI的还是WIDE,对就DELPHI是PAnsiChar和PWideChar
keytype:0代表keya,2代表keyb,类型为int
data:读取指定块号内的数据类型为char*——这要看SDK的版本是ANSI的还是WIDE,对就DELPHI是PAnsiChar和PWideChar
error:错误信息,读取过程中出现的错误,类型为char*——这要看SDK的版本是ANSI的还是WIDE,对就DELPHI是PAnsiChar和PWideChar

/*======================================================================//

delphi 中:
function M1_card_read _data(block_M1:Integer; key:PChar; keytype:Integer; data:PChar; error:PChar):Integer;stdcall;external 'WatchReader.dll';

##############
delphi7或以下的版本PChar=PAnsiChar,XE的版本PChar=PWideChar;一定要仔细区分
另外,函数名称的大小写也要注意,最好还是一模一样
  • 打赏
  • 举报
回复
DLL中的名字是M1_card_read_data,你写成M1_card_data,当然无法定位了。如果非要用这个名字,可以声明中指定name。
// int __stdcall M1_card_read_data(int block_M1,char* key,int keytype, char* data,char* error);
function M1_card_data(block_M1: Integer; key: PAnsiChar; keytype: Integer; data: PAnsiChar; error: PAnsiChar): integer; stdcall; external 'WatchReader.dll' name 'M1_card_read_data';
hongss 2018-12-17
  • 打赏
  • 举报
回复
char * 在Delphi中用PChar

先把这个改了看看

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧