7

このような配列を初期化したい -

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 はどちらか一方ですが、頑固に間違った型に変換されているようです。

4

7 に答える 7

13

インターフェイス宣言からGUIDを取得し、それらを(文字列)定数として宣言できます。次に、これらの定数をインターフェイス宣言と配列定数宣言で使用できます。コンパイラーは、TGUIDが予期される有効なGUID文字列を受け入れます。文字列が無効な場合、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);
于 2009-04-01T08:50:31.667 に答える
3

const 配列を使用する場合は、次のような const 値で設定する必要があります。

const GuidArray: array[0..0] of TGuid=
  ('{84DBCC66-72AA-4806-AE28-B55FC5B83FC8}');
于 2009-04-01T07:48:26.103 に答える
1

GUID の配列を返す関数を作成できます。(私はこの手法を一定の日付値に使用します。)

  • これは「真の」定数ではありませんが、通常定数を使用する場所であればどこでも使用できるはずです。
  • ただし、「割り当て可能な型付き定数」オプションを使用して変更することもできません。不正行為は許可されていません:)
  • したがって、初期化セクションでグローバルを設定するよりもわずかな利点があります。
  • また、インターフェイスで使用される 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;
于 2015-01-09T16:58:53.593 に答える
1

別のアイデア: 以下はコンパイルされます:

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

Blah([IInterface, IDispatch]);

たぶん、このアプローチを使用できます。

于 2009-04-02T07:31:51.003 に答える
1

私はC++Builderで試しました:

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

私は明示的なキーワード __uuidof があなたが抱えている問題を回避するかもしれないと思っていましたが、それは単にそれを非常に似たものに置き換えるだけです。

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

(英語: [C++ エラー] Unit1.cpp(9): E2034 'const _GUID' から 'unsigned long' への変換は不可能です)

于 2009-04-01T08:29:12.637 に答える
0

IInterface の配列を作成できます。

于 2009-04-01T07:13:13.957 に答える