我想要一系列初始化喜欢这个-

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'

怎么奇怪了!当然模是一个或另一个,但它似乎顽固地转变为错误的类型。

有帮助吗?

解决方案

可以从接口声明拉guid和它们声明为(字符串)常数。然后,您可以在您的接口声明和你的数组常量声明使用这些常量。编译器接受有效的GUID的字符串,其中TGUID预期。无效的字符串导致E2204“不当GUID语法”编译错误。

const
  MyGuid1 = '{99BDAB12-B1B6-41B0-9BF1-2C1DB3D8EC70}';
  MyGuid2 = '{8C7CD303-8D81-469B-99ED-E1F163E9036F}';

type
  IMyInterface1 = interface
    [MyGuid1]
  end;

  IMyInterface2 = interface
    [MyGuid2]
  end;

const
  MyArray: array[0..1] of TGUID = (MyGuid1, MyGuid2);

其他提示

如果您使用一个const阵列你必须像这样常量值设置它:

const GuidArray: array[0..0] of TGuid=
  ('{84DBCC66-72AA-4806-AE28-B55FC5B83FC8}');

我只是试图在C ++商:

const TGUID g = __uuidof(IInterface);
const TGUID MyArray[] = {__uuidof(IInterface)};

我怀疑是明确的关键字__uuidof可能避开你有问题,但它仅仅是东西代替它非常similar.While第一线工作正常,第二个得到:

[C++ Fehler] Unit1.cpp(9): E2034 Konvertierung von 'const _GUID' nach 'unsigned long' nicht möglich

(英文:[C ++错误] Unit1.cpp(9):E2034转换从 '常量_GUID' 到 '无符号长' 是不可能的)

另一个想法:以下编译:

procedure Blah(const MyArray: array of TGUID);
begin
  //...
end;

Blah([IInterface, IDispatch]);

也许你可以使用这种方法。

你可以写一个功能返回的你的系列Guid。(I使用这种技术对恒定的日期的价值观。)

  • 这不是"真正的"一个恒定不变,但应该可以使用,无论你愿意经常使用恒定。
  • 但它也不能以修改,使用"可转让的类型的常数"的选项。 作弊不允许的:)
  • 因此,它有一个小小的优势,设置一个全球性的 初始化 部分。
  • 此外,它的小手册工作于移动Guid使用的接口进入他们自己的常数。

你有选择返回的一个动态或固定的尺寸阵列。

备选案文1

type
  TGUIDArray = array of TGUID;

function GetMyInterfaces: TGUIDArray;
begin
  SetLength(Result, 2);
  Result[0] := IMyInterface1;
  Result[1] := IMyInterface2;
end;

备选案文2

type
  TGUIDArray = array[0..1] of TGUID;

function GetMyInterfaces: TGUIDArray;
begin
  Result[0] := IMyInterface1;
  Result[1] := IMyInterface2;
end;

可以创建IInterface的阵列。

下面是一个使用的事实,传统上,consts是不是真的在delphi const的一种方法,我发现了。需要编译器开关返回到这种行为(在D2007)

{$J+}
Const MyArray : Array[0..0] Of TGUID = (());
{$J-}

在初始化部分 -

MyArray[0] := IInterface;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top