delphi string转WideString的问题

richardi 2010-10-08 03:21:46
需要用delphi调用vc写的dll中的一个函数,需要传递1个参数,该参数是WideString类型。
例如
SetPram(const prm:WideString);
如果在Delphi中传递空字符串SetPram('');就报错,说无效参数,空字符串中加个空格就没事,但是我的程序必须要传递一个空字符串,不能是空格,需要怎么做。我想应该是string类型的空字符串'',转成WideString不认造成的。

...全文
1330 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
touchboy3 2012-11-05
  • 打赏
  • 举报
回复
很有帮助,谢了
yzlxy 2010-10-09
  • 打赏
  • 举报
回复
用 SetPram('\0');看看
richardi 2010-10-09
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 yzlxy 的回复:]
var
s:string;
begin
s := '';
SetPram(StringToOleStr(s));
end;
[/Quote]

还是不行,仍然提示无效参数,还是不能把''传进去,
richardi 2010-10-09
  • 打赏
  • 举报
回复
以上答案都不正确!终于找到了正确的方法
SetPram(#0);
#0代表空字符,可以成功传递并使VC正确相应。

分不多,参与者尽量给分!谢谢各位了
火星牛 2010-10-09
  • 打赏
  • 举报
回复
引入函数,可能需要定义成
procedure SetPram(const prm:PWideChar);stdcall;external xx.dll;
快乐老猫 2010-10-09
  • 打赏
  • 举报
回复
空是 nil

你也可以将string直接赋值给widestring,然后再传进去。
richardi 2010-10-09
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 yzlxy 的回复:]
用 SetPram('\0');看看
[/Quote]
试了也不行,问题就是delphi传的参数是给对象的一个属性,该对象是vc写的,属性需要赋空值,用delphi传进去的值就报错,说无效参数
yzlxy 2010-10-08
  • 打赏
  • 举报
回复
var
s:string;
begin
s := '';
SetPram(StringToOleStr(s));
end;
richardi 2010-10-08
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 kye_jufei 的回复:]
可否?


Delphi(Pascal) code
procedure TForm1.Button1Click(Sender: TObject);
var
a:Widestring;
begin
begin
a:='s';
ShowMessage(StringReplace(a,'s','',[]));
Edit1.Text:=a+'s';
……
[/Quote]

vc的源码我也不知道,我只是掉用vc写的com程序dll文件,dll在delphi中自动形成一个类文件,有很多接口,源码太乱不好懂。我只知道同样传参数,用vb写就没问题
UserAuthObj.StartApp "", 8//这是vb的代码就可以执行

UserAuthObj.StartApp('',8)这是delphi的代码就报错,说参数无效,错误原因就是'' 和""不同。
快烦死了。

kye_jufei 2010-10-08
  • 打赏
  • 举报
回复
可否?

procedure TForm1.Button1Click(Sender: TObject);
var
a:Widestring;
begin
begin
a:='s';
ShowMessage(StringReplace(a,'s','',[]));
Edit1.Text:=a+'s';
end;
end;
kye_jufei 2010-10-08
  • 打赏
  • 举报
回复
這樣?

procedure TForm1.Button1Click(Sender: TObject);
var
a:Widestring;
begin
a:=VarToStrDef(a,'');
ShowMessage(a);
Edit1.Text:=a+'sss';
end;
bdmh 2010-10-08
  • 打赏
  • 举报
回复
你还是把vc的原型贴出来吧
kye_jufei 2010-10-08
  • 打赏
  • 举报
回复
別急,先不要往自己的程序裡套,先把以下語句show出來看下結果?(主要看下edit1的text中顯示的sss前有沒有一個空格字符),這時再檢查你VC寫的DLL的這個widestring參數〈最好跟蹤一下代碼,必要時show出來看下結果〉單步看結果。。。

procedure TForm1.Button1Click(Sender: TObject);
var
s:WideString;
begin
s:=StringOfChar(' ',1);
ShowMessage(s);
Edit1.Text:=s+'sss';
end;
richardi 2010-10-08
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 kye_jufei 的回复:]
引用 5 楼 richardi 的回复:
引用 3 楼 kye_jufei 的回复:
Delphi(Pascal) code
procedure TForm1.Button1Click(Sender: TObject);
var
S:WideString;
begin
S:=StringOfChar(' ',1);
ShowMessage(S);
end;

还是不行!

……
[/Quote]
试了,确实不行,程序的源代码是:
UserAuthObj.StartApp('',8);// 改成


procedure TSAPIUserAuthObj.StartApp(const bstrPwd: WideString; nThdCount: SYSINT);//类方法原型:
begin
DefaultInterface.StartApp(bstrPwd, nThdCount);//这一步调用出错,bstrPwd仍然为WideString类型
end;
kye_jufei 2010-10-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 richardi 的回复:]
引用 1 楼 jjwwang 的回复:
var s: Widestring = '';
setparam(s);可行否?

我这么试了也不行。好像Widestring的参数就是不认'';
[/Quote]
這個肯定不行,以widestring返回是一個空值,不是空格。。。
kye_jufei 2010-10-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 richardi 的回复:]
引用 3 楼 kye_jufei 的回复:
Delphi(Pascal) code
procedure TForm1.Button1Click(Sender: TObject);
var
S:WideString;
begin
S:=StringOfChar(' ',1);
ShowMessage(S);
end;

还是不行!
[/Quote]

不行?你測試了沒。。。SHOW出來看一下。。。

procedure TForm1.Button1Click(Sender: TObject);
var
s:WideString;
begin
s:=StringOfChar(' ',1);
ShowMessage(s);
Edit1.Text:=s+'sss';
end;
richardi 2010-10-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 bdmh 的回复:]
vc写的dll中的参数是什么类型呢,这类型不能想用什么就用什么啊
[/Quote]
VC的参数类型是widestring,只要给它传递'' 就报错说是无效参数,DLL是无法改的,因为这是一个别人写好的COM程序
richardi 2010-10-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bdmh 的回复:]
用PWideChar
[/Quote]
也不行,用PWideChar('')编译报错,用PWideChar(' ')程序结果不对,程序就需要传递一个空字符串'',不能传空格
bdmh 2010-10-08
  • 打赏
  • 举报
回复
vc写的dll中的参数是什么类型呢,这类型不能想用什么就用什么啊
richardi 2010-10-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 kye_jufei 的回复:]
Delphi(Pascal) code
procedure TForm1.Button1Click(Sender: TObject);
var
S:WideString;
begin
S:=StringOfChar(' ',1);
ShowMessage(S);
end;
[/Quote]
还是不行!
加载更多回复(4)

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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