Как Вы инициализируете массив константы TGUID от Интерфейсных данных типа в Delphi?

Пожалуйста, попробуйте изменить:

$P{personelId}.equals(null)? "":"" 
to 
$P{personelId} == null ? "":"" OR $P{personelId}.equals("null") ? "":"" 

ИЛИ

попробуйте адаптировать свой код (пример в MySql):

 select if($P{personelId} is null,'flagA','flagB') flag_personelId
    from if($P{personelId} is null,'testA','testB') table_test
    where findA = if($P{personelId} is null,'0','1')

Это работа для меня.

7
задан David 1 April 2009 в 08:06
поделиться

6 ответов

Можно вытянуть 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);
11
ответ дан 6 December 2019 в 11:53
поделиться

При использовании массива константы, необходимо настроить его со значениями константы как это:

const GuidArray: array[0..0] of TGuid=
  ('{84DBCC66-72AA-4806-AE28-B55FC5B83FC8}');
3
ответ дан 6 December 2019 в 11:53
поделиться

Я просто попробовал в Разработчике C++:

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 из 'константы _GUID' к 'неподписанному длинный' не возможный)

1
ответ дан 6 December 2019 в 11:53
поделиться

Другая идея: следующие компиляции:

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

Blah([IInterface, IDispatch]);

Возможно, можно использовать этот подход.

1
ответ дан 6 December 2019 в 11:53
поделиться

Можно создать массив IInterface.

0
ответ дан 6 December 2019 в 11:53
поделиться

Вот способ, которым я обнаружил использование того, что традиционно, consts не являются действительно константой в Дельфи. Требует, чтобы переключатель компилятора возвратился к этому поведению (В D2007)

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

В разделе инициализации -

MyArray[0] := IInterface;
0
ответ дан 6 December 2019 в 11:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: