delphi无效的枚举值'_24170';
我有我的dll,它包含函数:delphi无效的枚举值'_24170';,delphi,enums,Delphi,Enums,我有我的dll,它包含函数: function GetPdfReport( //this is string representation of MyEnum AStringParam : Pchar ): TByteDynArray; stdcall; export; var //my vars begin try try //i try to pass incorrect string value on purpose to get exception
function GetPdfReport(
//this is string representation of MyEnum
AStringParam : Pchar
): TByteDynArray; stdcall; export;
var
//my vars
begin
try
try
//i try to pass incorrect string value on purpose to get exception
MyEnumVariable := TRttiEnumerationType.GetValue<MyEnum>(AStringParam);
//code hide
except
on E : Exception do
begin
//log error
Log.Error(E.ClassName + ' : ' + E.Message, 'errors');
end;
end;
finally
//dispose
end;
函数GetPdfReport(
//这是MyEnum的字符串表示形式
收敛参数:Pchar
):t字节;stdcall;出口;
变量
//我的助手
开始
尝试
尝试
//我试图故意传递不正确的字符串值以获取异常
MyEnumVariable:=TRttiEnumerationType.GetValue(AStringParam);
//代码隐藏
除了
关于E:Exception-do
开始
//日志错误
Log.Error(E.ClassName+':'+E.Message,'errors');
结束;
结束;
最后
//处置
结束;
然后我得到一个例外:
InnerException消息为“无效的枚举值”\u 24170“无法删除”
反序列化为类型
“MyEnum”
我希望日志异常消息带有作为参数传递的字符串值,但不需要一些不清楚的数字,如“\u 24170”。我该怎么做
更新:
假设我有MyEnum
和3个值(一,二,三)
,当我传递到我的函数字符串“五”
时,我希望看到这样的异常:
无效的枚举值“5”无法反序列化为类型“MyEnum”
谢谢。如果提供的文本与某个枚举值不匹配,则您提供的代码不会引发异常。而是返回值
-1
。当然,-1
不是有效的枚举值,因此如果希望执行错误处理,trttineumerationtype.GetValue
是一个相当有问题的方法
你需要自己测试一下。与其使用TRttiEnumerationType
,不如直接转到GetEnumValue
,这会返回一个整数,从而使错误检查更易于编写
var
OrdinalValue: Integer;
Value: MyEnum;
....
OrdinalValue := GetEnumValue(TypeInfo(MyEnum), AStringParam);
if OrdinalValue = -1 then
// handle error
Value := MyEnum(OrdinalValue);
当然,您希望将其包装到一个方法中以使其可重用。如果提供的文本与其中一个枚举值不匹配,则您提供的代码不会引发异常。而是返回值
-1
。当然,-1
不是有效的枚举值,因此如果希望执行错误处理,trttineumerationtype.GetValue
是一个相当有问题的方法
你需要自己测试一下。与其使用TRttiEnumerationType
,不如直接转到GetEnumValue
,这会返回一个整数,从而使错误检查更易于编写
var
OrdinalValue: Integer;
Value: MyEnum;
....
OrdinalValue := GetEnumValue(TypeInfo(MyEnum), AStringParam);
if OrdinalValue = -1 then
// handle error
Value := MyEnum(OrdinalValue);
当然,你会想用一种方法来包装它,使其可重复使用。@DavidHeffernan,那么,你看,my不包含这个string@DavidHeffernan,看,然后,我的不包含此字符串。我的dll与soap web服务一起工作,似乎在调用web服务方法时引发了异常,无论如何,谢谢你的回答,这对我非常有用。我的dll与soap web服务一起工作,似乎在我调用web服务方法时引发了异常,无论如何,谢谢你的回答,这对我非常有用。