【发布时间】:2012-03-06 20:46:27
【问题描述】:
我有一个 Delphi 5 遗留应用程序,其中有一个“字符串”值被分配给“OleVariant”变量的部分。像这样的:
var
X: OleVariant;
S: string;
Begin
S:= ‘This string should contain 200 characters as per design’;
X:= S;
End;
如果“S”的长度大于 128,则“X”的值会被截断,最多只能保存 128 个字符。
有没有办法克服这个问题?
我相信有一种方法,因为如果我从头开始创建自己的演示应用程序(在同一台 PC 上,使用相同的 Delphi 5),它允许我传递更长的字符串值并且不会进行截断。
可能与项目设置或编译器指令有关。我已经尝试过这个想法,但我还没有解决方法。
感谢任何帮助。谢谢。
演示:
procedure TForm1.Button1Click(Sender: TObject);
var
X: OleVariant;
S: string;
begin
//in the Edit I pass a string of 240 chars, let's say;
S:= Edit1.Text;
X:= S;
ShowMessage(IntToStr(Length(X)) + ' : ' + IntToStr(Length(S)));
//this showmessage shows "128 : 240"
end;
【问题讨论】:
-
请复制并粘贴真实代码,以证明您声明的内容。我期望一些代码分配一个 实际 200 个字符长的
string变量,以及一些测量OleVariant值的长度并打印值128的代码。如果这不是您确定存在问题的方式,那么请描述您所做的 以得出X的长度仅为128 个字符的结论。 -
看描述。我添加了更多代码。如果您调试和跟踪应用程序(调试时检查 X 和 S),您也可以注意到问题。
-
我在 Delphi 4 (Windows 95) 中试过这个,字符串被 not 截断。
-
用 D5 测试。工作正常。唯一会影响字符串长度的是使用
{$H-}或{$LONGSTRINGS OFF},但这将截断为255 (ShortString)。确保没有其他单位重新定义OleVariant,例如type OleVariant = string[128]。将'X'定义为X: System.OleVariant并再次测试...... HTH -
@kobik
type OleVariant = string[128]。那会很恶心!! ;-) 一个狡猾的头脑。