怎样将一个STRING转成一个WIDESTRING(50分)

  • 主题发起人 Richling1975
  • 开始时间
R

Richling1975

Unregistered / Unconfirmed
GUEST, unregistred user!
各位:
有个小问题请问一下
我從网上DOWN了一個轉換中文內碼的OCX(VB寫的), 其中有一個方法如下:
function TBig2GB.BigToGB(var BigStr: WideString): WideString;
begin
Result := DefaultInterface.BigToGB(BigStr);
end;
要求輸入WIDESTRING作為參數, 請問我如何將一個STRING轉為WIDESTRING
另外一個問題是, 我在DELPHI中調用時,會出錯, 但是在其它系統比如VFP, NOTES
中卻能成功調用, 請問DELPHI和VB的OCX有沖突嗎?
如何解決?
 
String和wideString是自动转换的。你看看其它地方有没有问题。
 
gondsoft:
我用一个TEDIT(EDITINPUT)来输入数据,另一个TEDIT(EDITRESULT)来接收数据, 然后用一个
BUTTON来触发此事件.
EditResult.TEXT :=ObjBigToGB.BigToGB(EditInput.Text);
Compile时就提示出错:Types of actual and formal var parameters must be identical
然后我又先定义一个WIDESTRING来做:
VAR cInPut,cResult : widestring
Begin
cInput:=EditInput.Text;
cResult:=ObjBigToGB(cInput);
EditResult.Text := cResult;
End;
可以编译成功,但运行时出错: Projcet Project1.Exe raised exception class EAccessViolation
with messagebox 'Access violation at address 7B3RB5DF in mould 'MSVBVM50.DLL'. Read of address
FFFFFFFF' . Process stopped . Use Step or Run to continue.

你有何建议?

 
你这样试一试:
var
s: string;
begin
SetLength(s, Length(EditInput.Text))
// 先给 s 分配空间
s := ObjBigToGB(cInput);
EditResult.Text := s;
end;
 
beta:
如果不提供一个WIDESTRING的类型,连COMPILE都不能通过

高手们注意一个第二个问题
 
Types of actual and formal var parameters must be identical
参数只能是变体类型。
函数ObjBigToGB的返回类型能确认吗?
 
gondsoft:
返回值的类型也是WIDESTRING.
 
var
s: string;
s1 : widestring;
begin
s1:= s;
end;
 
s:=pchar(s)
 
你的第二个问题的处理方法是对的,但是可能是因为这个函数需要预先分配内存,
你可以用beta的方法,不过需要把String改成WideString.但是如果是需要预先
分配内存,那么他应该有一个函数可以先调用来计算一下需要分配多少的字节的长度.

但是不明白这个函数的参数为什么要变量,而不能是常量.

总之,你不用那么辛苦的,我的主页上有一个Delphi做的转换内码的程序,带有源码,
你去下载就是了:
www.aidelphi.com
 
顶部