在 Delphi 中,如何从接口类型数据初始化 TGUID 常量数组?
我想初始化一个像这样的数组 -
Const MyArray : Array[0..0] Of TGUID = (IInterface);
但它会导致 -
[DCC Error] Test.pas(10): E2010 Incompatible types: 'TGUID' and 'string'
所以为了看看会发生什么,我尝试了这个 -
Const MyArray : Array[0..0] Of String = (IInterface);
结果是这样!
[DCC Error] Test.pas(10): E2010 Incompatible types: 'string' and 'TGUID'
多么奇怪! 当然,IInterface 是其中之一,但它似乎顽固地转变成错误的类型。
I want to initialise an array like this -
Const MyArray : Array[0..0] Of TGUID = (IInterface);
But it results in -
[DCC Error] Test.pas(10): E2010 Incompatible types: 'TGUID' and 'string'
So to see what would happen I tried this -
Const MyArray : Array[0..0] Of String = (IInterface);
Which results in this!
[DCC Error] Test.pas(10): E2010 Incompatible types: 'string' and 'TGUID'
How strange! Surely IInterface is one or the other, but it seems to stubbornly transform into the wrong type.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
您可以从接口声明中提取 GUID 并将它们声明为(字符串)常量。 然后,您可以在接口声明和数组常量声明中使用这些常量。 编译器接受有效的 GUID 字符串,其中需要 TGUID。 无效的字符串会导致 E2204“不正确的 GUID 语法”编译错误。
You can pull the GUIDs from the interface declarations and declare them as (string) constants. You can then use these constants in your interface declarations and your array constant declarations. The compiler accepts valid GUID strings where TGUID is expected. Invalid strings result in E2204 "Improper GUID syntax" compile error.
如果您使用 const 数组,则必须使用 const 值对其进行设置,如下所示:
If you use a const array you have to set it up with const values like this:
您可以编写一个函数来返回 GUID 数组。 (我将这种技术用于恒定日期值。)
您可以选择返回动态或固定大小的数组。
选项 1
选项 2
You could write a function to return your array of GUIDs. (I use this technique for constant date values.)
You have the choice of returning a dynamic or fixed size array.
Option 1
Option 2
我刚刚在 C++Builder 中尝试过:
我怀疑显式关键字 __uuidof 可能会避免您遇到的问题,但它只是用非常相似的东西替换它。虽然第一行工作正常,但第二行产生:(
英语:[ C++ 错误] Unit1.cpp(9): E2034 从“const _GUID”转换为“unsigned long”不可能)
I just tried in C++Builder:
I suspected that the explicit keyword __uuidof might avoid the problem you have, but it merely replaces it with something very similar.While the first line works fine, the second one yields:
(in English: [C++ error] Unit1.cpp(9): E2034 Conversion from 'const _GUID' to 'unsigned long' not possible)
另一个想法:以下编译:
也许你可以使用这种方法。
Another idea: The following compiles:
Maybe you can use this approach.
您可以创建一个 IInterface 数组。
You can create an array of IInterface.
这是我发现的一种方法,利用了传统上 const 在 delphi 中并不是真正的 const 的事实。 需要编译器开关才能返回此行为(在 D2007 中)
在初始化部分 -
Here's a way I discovered using the fact that traditionally, consts are not really const in delphi. Requires a compiler switch to return to this behaviour (In D2007)
In initialization section -