delphi 调用vc dll的正确写法(100分)

  • 主题发起人 主题发起人 hedasan
  • 开始时间 开始时间
H

hedasan

Unregistered / Unconfirmed
GUEST, unregistred user!
本人在用delphi调用一个dll文件,此文件使用VC所写,其中的一个函数具体为<br>&nbsp;【函数原型】<br>BOOL WINAPI Login_R(LPCTSTR SystemID, &nbsp;LPCTSTR Password); <br>&nbsp; 【参数说明】<br> SystemID 类型:LPCTSTR,最大长度为15个字符<br> 意义:在信息中心注册的接口名。<br> Password 类型: LPCTSTR,最大长度为8个字符<br> 意义;接口密码。<br>我在DELPHI中是这样定义调用的,是大概如下:<br>定义:<br>function Login_R(SystemID,LPCTSTR:Pchar):boolean;stdcall;external 'Project1.dll';<br>调用:<br>var<br>p1:pchar;<br>p2:pchar;<br>&nbsp;begin<br>&nbsp; p1:='xxxxx';<br>&nbsp; p2:='yyyyyy';<br>&nbsp; if Login_R(p1,p2)<br>&nbsp; &nbsp;then <br>&nbsp; &nbsp; showmessage('ok');<br>&nbsp; &nbsp;else<br>&nbsp; &nbsp; showmessage('fail');<br>程序变异或执行都无异常,可是Login_R(p1,p2)不管输入参数为何值,总是输出为FALSE,此DLL无错,在VC中调用<br>只要参数正确就会返回TRUE,是不是DELPHI处理PCHAR变量不能像我那样写,我听说PCHAR调用前要分配内存,请各位<br>大侠帮我写一个正确的写法。 &nbsp; &nbsp; &nbsp;
 
你的函数定义的有点别扭<br>Login_R(SystemID,LPCTSTR:Pchar):<br>LPCTSTR改成password嘛,LPCTSTR本身就是个类型<br>当然这个可能不是问题的所在
 
你这个帖子的代码肯定不是你的文件上拷贝下来的<br>showmessage('ok') 后面有个分号,编译肯定过不了,所以请你完全拷贝你的pas的内容
 
对了,C的BOOL,对应delphi是 LongBool ,4个字节<br>boolean是一个字节<br>其实在windows.pas已经定义了BOOL类型(就是longbool),<br>你可以直接使用 BOOL 作为返回类型<br><br>错误的分析:boolean是1个字节,使用al寄存器为返回值<br>BOOL(longbool)是4个字节,返回值放在eax<br>当返回,假设 0x12345600 时,非0,是true<br>但是如果只取al,那么变成 0x00,变成false,<br>所以返回值要定义成和c对应的 LongBool
 
Login_R(SystemID,LPCTSTR:Pchar)我写错了,应该是Login_R(SystemID,password:Pchar),
 
你把返回值由boolean 改回 longbool了吗?我看10有8、9就是这个问题
 
请问HEDASAN<br><br>我也遇到这个问题了.请问您已经解决了.如果方便的话.告诉我一下原因.<br>我都要疯掉了。非常感谢.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部