需要用delphi调用vc写的dll中的一个函数,需要传递1个参数,该参数是WideString类型。
例如
SetPram(const prm:WideString);
如果在Delphi中传递空字符串SetPram('');就报错,说无效参数,空字符串中加个空格就没事,但是我的程序必须要传递一个空字符串,不能是空格,需要怎么做。我想应该是string类型的空字符串'',转成WideString不认造成的。
例如
SetPram(const prm:WideString);
如果在Delphi中传递空字符串SetPram('');就报错,说无效参数,空字符串中加个空格就没事,但是我的程序必须要传递一个空字符串,不能是空格,需要怎么做。我想应该是string类型的空字符串'',转成WideString不认造成的。
setparam(s);可行否?
var
S:WideString;
begin
S:=StringOfChar(' ',1);
ShowMessage(S);
end;
不行?你測試了沒SHOW出來看一下procedure TForm1.Button1Click(Sender: TObject);
var
s:WideString;
begin
s:=StringOfChar(' ',1);
ShowMessage(s);
Edit1.Text:=s+'sss';
end;
UserAuthObj.StartApp('',8);// 改成
procedure TSAPIUserAuthObj.StartApp(const bstrPwd: WideString; nThdCount: SYSINT);//类方法原型:
begin
DefaultInterface.StartApp(bstrPwd, nThdCount);//这一步调用出错,bstrPwd仍然为WideString类型
end;
var
s:WideString;
begin
s:=StringOfChar(' ',1);
ShowMessage(s);
Edit1.Text:=s+'sss';
end;
var
a:Widestring;
begin
a:=VarToStrDef(a,'');
ShowMessage(a);
Edit1.Text:=a+'sss';
end;
var
a:Widestring;
begin
begin
a:='s';
ShowMessage(StringReplace(a,'s','',[]));
Edit1.Text:=a+'s';
end;
end;
vc的源码我也不知道,我只是掉用vc写的com程序dll文件,dll在delphi中自动形成一个类文件,有很多接口,源码太乱不好懂。我只知道同样传参数,用vb写就没问题
UserAuthObj.StartApp "", 8//这是vb的代码就可以执行UserAuthObj.StartApp('',8)这是delphi的代码就报错,说参数无效,错误原因就是'' 和""不同。
快烦死了。
s:string;
begin
s := '';
SetPram(StringToOleStr(s));
end;
procedure SetPram(const prm:PWideChar);stdcall;external xx.dll;
SetPram(#0);
#0代表空字符,可以成功传递并使VC正确相应。分不多,参与者尽量给分!谢谢各位了