1,OleVariant 和 Variant有什么区别啊? 感觉即使是同一类型的OleVariant变量也不能直接运算,可是这样??
2,一个OleVariant的变量怎么转化为Byte,又怎么转化为一个String呢
3,
procedure TForm1.FormCreate(Sender: TObject);
var T : SpObjectToken;
var i : Integer;
var j: Integer;
begin
j := 0;
i := 5;
try
i := i div j;
except on
EDivByZero do
ShowMessage('kk');
on
E : Exception do
ShowMessage('ee');
end;
end; //为什么无法检测到异常呢, 为什么啊???4,最后一个问题了:
Private Sub TokenInfo(text, token As SpObjectToken)
On Error GoTo TokenInfoExit
List1.AddItem text
Set C = token.Category
TokenInfoExit:
Select Case Err.Number
Case 0
List1.AddItem " Token.GetDescription:"
List1.AddItem " " & token.GetDescription
List1.AddItem " Token.Category.Id:"
List1.AddItem " " & token.Category.Id
List1.AddItem " Token.Id:"
List1.AddItem " " & token.Id
Case SPERR_UNINITIALIZED
List1.AddItem " SPERR_UNINITIALIZED"
End Select
List1.AddItem ""End Sub这一段VB的代码中有一个Select Case Err.Number的过程以捕获SPERR_UNINITIALIZED这个ERROR 如果是在DELPHI中 怎么捕获这个ERROR呢?? 万分感谢
另外问下 有没有人用微软的SAPI做语音开发的 有的话加我MSN
[email protected] 大家可以好好交流下
2,一个OleVariant的变量怎么转化为Byte,又怎么转化为一个String呢
3,
procedure TForm1.FormCreate(Sender: TObject);
var T : SpObjectToken;
var i : Integer;
var j: Integer;
begin
j := 0;
i := 5;
try
i := i div j;
except on
EDivByZero do
ShowMessage('kk');
on
E : Exception do
ShowMessage('ee');
end;
end; //为什么无法检测到异常呢, 为什么啊???4,最后一个问题了:
Private Sub TokenInfo(text, token As SpObjectToken)
On Error GoTo TokenInfoExit
List1.AddItem text
Set C = token.Category
TokenInfoExit:
Select Case Err.Number
Case 0
List1.AddItem " Token.GetDescription:"
List1.AddItem " " & token.GetDescription
List1.AddItem " Token.Category.Id:"
List1.AddItem " " & token.Category.Id
List1.AddItem " Token.Id:"
List1.AddItem " " & token.Id
Case SPERR_UNINITIALIZED
List1.AddItem " SPERR_UNINITIALIZED"
End Select
List1.AddItem ""End Sub这一段VB的代码中有一个Select Case Err.Number的过程以捕获SPERR_UNINITIALIZED这个ERROR 如果是在DELPHI中 怎么捕获这个ERROR呢?? 万分感谢
另外问下 有没有人用微软的SAPI做语音开发的 有的话加我MSN
[email protected] 大家可以好好交流下
var
P: Pointer;
begin
Result := VarArrayCreate([0, Length(AString)], varByte);
P := VarArrayLock(Result);
try
Move(AString[1], P^, Length(AString));
finally
VarArrayUnlock(Result);
end;
end;function VariantToString(AVar: OleVariant): string;
var
P: Pointer;
FSize: Integer;
begin
FSize := VarArrayHighBound(AVar, 1) - VarArrayLowBound(AVar, 1) + 1;
SetLength(Result, FSize);
P := VarArrayLock(AVar);
try
Move(P^, Result[1], FSize);
finally
VarArrayUnlock(AVar);
end;
end;不懂VB
procedure TForm1.FormCreate(Sender: TObject);
var T : SpObjectToken;
var i : Integer;
var j: Integer;
begin
j := 0;
i := 5;
try
i := i div j;
ShowMessage('1 / 0 = '+IntToStr(i)); ///这加上,不然上面那句给Delphi卡擦掉的
except on
EDivByZero do
ShowMessage('kk');
on
E : Exception do
ShowMessage('ee');
end;
end; i := i div j; 这句的结果完全没有用到, 聪明的Delphi自然不会编译这样的费代码,你可以加上一句
ShowMessage('1 / 0 = '+IntToStr(i)); 这样i的值就被调用了, 编译器才编译i := i div j这句。delphi可以这样:
on E : Exception do
begin
ShowMessage('Exception class name = '+E.ClassName);
ShowMessage('Exception message = '+E.Message);
end;
一般来说使用 Variant and OleVariant 类型是不好的(毕竟要通过编译器去转换),
但如果数据类型只能在运行时确定, 就必须使用这些类型了,
比如开发 COM 和数据库程序时.
OleVariant 常用于开发基于 COM 的程序, 比如 OLE 自动化和 ActiveX 控件.
Variant 则常用于非 COM 程序.
原因是 Variant 能(与字符串变量一样)更高效地存储 Delphi 字符串,
但 OleVariant 需要把所有的字符串转换为 Ole Strings(WideChar Strings),
而且由于没有引用记数, 字符串将永远存在.