【发布时间】:2017-01-17 10:14:32
【问题描述】:
所以我正在使用 Delphi 使用 SOAP 服务,但很难设置枚举的值。下面是枚举声明:
Extension = (pdf, xls, txt, xlsx, docx, doc, xml, png, jpg, gif);
这在您导入 WSDL 后在 Delphi 导入的单元中声明。 现在我的应用正在使用这个单元,我尝试了以下选项,但无济于事。
选项 1:(不编译。未声明的标识符:'pdf')
uses SOAPAPI_Unit
type
Extension = SOAPAPI_Unit.Extension;
....
procedure TForm1.Button2Click(Sender: TObject);
var
Ext : Extension;
begin
Document.Extension := pdf;
end;
选项 2:(编译,但我收到服务器错误提示未设置对象引用)
uses SOAPAPI_Unit
....
procedure TForm1.Button2Click(Sender: TObject);
var
Ext : SOAPAPI_Unit.Extension;
begin
Document.Extension := Ext(0);
end;
选项 3(在主 .pas 文件中重新声明 Enum,但随后我得到不兼容的类型:'SOAPAPI_Unit.Extension' 和 'formMain.Extension')
uses SOAPAPI_Unit
type
Extension = (pdf, xls, txt, xlsx, docx, doc, xml, png, jpg, gif);
....
procedure TForm1.Button2Click(Sender: TObject);
var
Ext : Extension;
begin
Document.Extension := pdf;
end;
选项 4(编译,但从服务器获取对象引用未设置错误)
uses SOAPAPI_Unit
....
procedure TForm1.Button2Click(Sender: TObject);
var
Ext : Extension;
begin
Document.Extension := Ext.pdf;
end;
【问题讨论】:
-
我们可以看看minimal reproducible example吗
-
文档建议使用不太可能与其他标识符冲突的枚举常量名称。如果标识符在同一范围内用于其他目的,则会发生命名冲突。还要为枚举类型使用更独特的名称。
-
我也很难相信你写的东西。我有点怀疑选项 2 和 4 是否按原样编译。如果我不得不猜测,我会想象枚举被声明为作用域枚举,并且您只需要使用该单元并引用完全作用域的值。
Document.Extension := Extension.pdf或Extension与其他内容发生冲突,然后是 `Document.Extension := SOAPAPI_Unit.Extension.pdf。尝试重新声明该类型永远不会奏效。你肯定明白为什么会这样。不要猜测。试着去理解。