delphi将pchar类型的变量传递给vc编写的dll问题,但是返回来的始终是一样的
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi将pchar类型的变量传递给vc编写的dll问题,但是返回来的始终是一样的相关的知识,希望对你有一定的参考价值。
这是vc的代码:
extern "C" _declspec(dllexport) char* login(char* name,char* password)
if(strcmp(name,"1"))
return name;//把传入的参数直接传回去看看变没变
else
return "no";
delphi中是这样写的:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
isright:pchar;
begin
isright:=login(PChar(name.Text),PChar(password.Text));
Form1.Caption:=string(isright);
end;
声明dll中的函数:
unit Ulogin;
interface
function login(name,password:pchar):pchar;cdecl;
implementation
function login;external 'login.dll' name 'login';
end.
我已经解决了,是delphi2010的问题.在2010中,pchar是unicode字符的
人如果返回变量x,应该在函数内为x分配内存空间。
char * xcalc(char* a, char*b)
char* x;
x = (char*)mallac(255);
strcat(x, "Test ok");
return x;
你看看这样返回对不对呢。
TDecryptString = function(S: PChar; p: PChar): PChar;stdcall;
这个是我以前写的,也是加密字符串的,c源程序找不到了,只找到delphi的代码
tmp := StrPas(PEncryptString(pchar(tmp2), pchar(theKey))); 参考技术A 我以前也遇到过类似的问题,delphi和VC之间的调用总有一些令人头疼的问题,返回的值不正确,改dll中的函数声明为如下试试:
function login(name,password:pchar):pchar;stdcall;external 'login.dll' ; 参考技术B 安大叔大叔大叔 参考技术C pchar字符型,而name.text是字符串,把字符串转成pchar型,那它就只取了name.text的第一个字符,pchar是字符型嘛,在login中,你声明一个pchar型的数组,ary,传值的时候把传进来的参数,如
ary :=copy(name.text,0,length(name.text)),这样试试,看行不行,我也只是种假设
以上是关于delphi将pchar类型的变量传递给vc编写的dll问题,但是返回来的始终是一样的的主要内容,如果未能解决你的问题,请参考以下文章