delphi将pchar类型的变量传递给vc编写的dll问题,但是返回来的始终是一样的 100
这是vc的代码:extern"C"_declspec(dllexport)char*login(char*name,char*password){if(strcmp(na...
这是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字符的 展开
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字符的 展开
展开全部
想起来了,你这个问题是C写得有问题。
人如果返回变量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)));
人如果返回变量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)));
展开全部
我以前也遇到过类似的问题,delphi和VC之间的调用总有一些令人头疼的问题,返回的值不正确,改dll中的函数声明为如下试试:
function login(name,password:pchar):pchar;stdcall;external 'login.dll' ;
function login(name,password:pchar):pchar;stdcall;external 'login.dll' ;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
pchar字符型,而name.text是字符串,把字符串转成pchar型,那它就只取了name.text的第一个字符,pchar是字符型嘛,在login中,你声明一个pchar型的数组,ary,传值的时候把传进来的参数,如
ary :=copy(name.text,0,length(name.text)),这样试试,看行不行,我也只是种假设
ary :=copy(name.text,0,length(name.text)),这样试试,看行不行,我也只是种假设
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询