Blue
Red
Green
Orange
Voilet
Slate
Dark

delphi7 调用delphi2009的动态库,传递pchar参数 ,出现乱码(100)

  • 主题发起人 luckywangxw
  • 开始时间
L

luckywangxw

Unregistered / Unconfirmed
GUEST, unregistred user!
代码如下,调用动态库 显示的结果是乱码,,如果把动态库改成delphi7 则不会出错---动态库delphi2009function showstr(av:pchar):boolean;begin showmessage(av);end;exports showstr;...---调用程序 delphi7var ps:pchar;const atitle='111';begin ps := StrAlloc(255); StrCopy(ps, PChar(atitle)); showstr(ps); StrDispose(p);end;
 
L

luckywangxw

Unregistered / Unconfirmed
GUEST, unregistred user!
再补充一点,,如果动态库,调用程序,都是delphi2009也不会出现问题
 

小雨哥

Unregistered / Unconfirmed
GUEST, unregistred user!
Delphi2009 的默认字符使用了 Unicode,也就是说,以前的 string 类型,它理解成 WideString,以前的 PChar 类型,它理解成 PWideChar。你这个代码里,就这样中计啦!
 
L

luckywangxw

Unregistered / Unconfirmed
GUEST, unregistred user!
请问,小雨哥, 上面的代码该如何修改下呢
 

小雨哥

Unregistered / Unconfirmed
GUEST, unregistred user!
那么,如果在 Delphi 2009 中要表示原来的 string 如何表示? AnsiString。原来的 PChar 如何表示?对啦,以此类推,就是 PAnsiChar 。你试试看。另外,据杯具的橙子讲,以后 PAnsiChar 都不能替代 Pointer ,它就是指向字符串的指针,而不再是任意类型指针了。这个我没有验证,你可以试试看。
 
L

luckywangxw

Unregistered / Unconfirmed
GUEST, unregistred user!
very good !!送分
 
L

luckywangxw

Unregistered / Unconfirmed
GUEST, unregistred user!
小雨哥还在吗? 我在动态库中 strcopy(av, pansichar(aform2.edit2.text));//edit2.text:='bbb';或 av:=pansichar(aform2.edit2.text);调用程序返回的 却是'b',不是'bbb' ,,这又是为什么呢
 

Similar threads

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