Delphi 用 Import Type Library 导入一个VB写的Com DLL后,自动将dll中所有string类型转换成WideString了,在实际使用过程中遇到了问题:
[Delphi Code]uses TestDLL_TLB; //导入Com后自动生成的单元。
var Test:Class1
begin
with FileDialog1 do //对话框选择文件,用的是Delphi 2010,支持unicode字符。
begin
showMessage(FileName); //测试用
Test:=CoClass1.Create;
Test.TestShow(FileName,Form1.Edit1.Text);
Test:=Nil;
end;
end;[VB Com Code]Public Function TestShow(Byval strFileName as string,ByRef strText as string) as long
'读取StrFileName,然后返回StrText
End Function
具体表现在:
如果从繁体XP系统,选择一个带简体路径的文件(内容是简体中文), Delphi中ShowMessage出来的路径名是正确的,但按默认的WideString方式传入DLL后,Eidt1中返回的内容为空。
此时,如果将路径名改成繁体或英文路径,则Edit1能显示出文件中的简体。Delphi中的WideString不是Unicode编码吗,如何处理才能显示出带简体路径的文件内容?另外,网上说Delphi在字符传递的时候最好不要用String和WideString,而用PChar/PWideChar。
如果要更改传递类型,是不是要手动将 TestDLL_TLB 单元中的WideString全部换成PWideChar,VB端能直接读取吗??因为刚刚从VB转入Delphi,请各位指教,不胜感谢!
[Delphi Code]uses TestDLL_TLB; //导入Com后自动生成的单元。
var Test:Class1
begin
with FileDialog1 do //对话框选择文件,用的是Delphi 2010,支持unicode字符。
begin
showMessage(FileName); //测试用
Test:=CoClass1.Create;
Test.TestShow(FileName,Form1.Edit1.Text);
Test:=Nil;
end;
end;[VB Com Code]Public Function TestShow(Byval strFileName as string,ByRef strText as string) as long
'读取StrFileName,然后返回StrText
End Function
具体表现在:
如果从繁体XP系统,选择一个带简体路径的文件(内容是简体中文), Delphi中ShowMessage出来的路径名是正确的,但按默认的WideString方式传入DLL后,Eidt1中返回的内容为空。
此时,如果将路径名改成繁体或英文路径,则Edit1能显示出文件中的简体。Delphi中的WideString不是Unicode编码吗,如何处理才能显示出带简体路径的文件内容?另外,网上说Delphi在字符传递的时候最好不要用String和WideString,而用PChar/PWideChar。
如果要更改传递类型,是不是要手动将 TestDLL_TLB 单元中的WideString全部换成PWideChar,VB端能直接读取吗??因为刚刚从VB转入Delphi,请各位指教,不胜感谢!
解决方案 »
- 求助,怎么能使TDBEdit(components[i])连续
- 请教:报表的问题。需要每页小计紧随数据行,主要是最后一页不能让小计出现在页尾底部。
- 电脑系统问题,求助!
- 支持Kerac,你来~~
- 请问如何直接给一个IP发信息?进来有分。
- 请教一个安装的问题
- 我用DELPHI 6 给 printer.PageHeight赋值为什么提示出错:READ-ONLY PROPERTY?
- 关于局域网中文件拷贝问题
- IntraWeb的IWComboBox如何实现自由输入字符?
- 如何能让我的按钮实现像‘’windows优化大师‘’中的那样的按钮!!
- 如何获得ppchar的长度
- delphi写的一个程序,程序中有汉字,ADO连接ACCESS数据库,表中也有汉字,在英文WIN下运行这个程序,汉字都乱码
var Test:Class1;
var S: WideString;
begin
with FileDialog1 do //对话框选择文件,用的是Delphi 2010,支持unicode字符。
begin
s := Form1.Edit1.Text;
showMessage(FileName); //测试用
Test:=CoClass1.Create;
Test.TestShow(FileName,s);
Test:=Nil;
end;
end;
var Test:Class1;
var S: WideString;
begin
with FileDialog1 do
begin
showMessage(FileName);
Test:=CoClass1.Create;
Test.TestShow(FileName,S]);
Eidt1.text := S; //这里依然显示不出来。而换成英文路径就可以了
Test:=Nil;
end;
end;