Как передать строковые индексы для OleVariant

Я конвертирую следующий пример кода в Delphi:

http://msdn.microsoft.com/en-us/library/bb176406%28v=office.12%29.aspx

Мой код выглядит примерно так:

var
  vTable, vRow: OleVariant;
begin
....

  while vTable.EndOfTable = False do
  begin
    vRow := vTable.GetNextRow;
    sEmail := vRow['Email1Address'];
    ShowMessage(sEmail);
  end;
end;

Проблема в том, что мне нужно передать строковый индекс «Email1Address», но Delphi выдает ошибку: Несовместимые типы: целое число и строка.

Следует ли мне использовать другой вариант?

TIA


person Xanyx    schedule 29.06.2010    source источник


Ответы (1)


Я взглянул на модуль Outlook, созданный из файла TLB, и он выглядит так:

_Row = interface(IDispatch)
    ['{000630D3-0000-0000-C000-000000000046}']
    //snip
    function Item(Index: OleVariant): OleVariant; safecall;
    //snip
  end;

Интерфейс Row имеет метод Item, который принимает OleVariant. Так что используйте это:

sEmail := vRow.Item('Email1Address');

Также обратите внимание на Справка MSDN.

person The_Fox    schedule 29.06.2010
comment
Спасибо, The_Fox. FTR, я действительно проверил исходный код Outlook, но у меня только до Outlook XP, а GetTable не был представлен до Outlook 2007. - person Xanyx; 29.06.2010
comment
Вы можете сами сгенерировать эти файлы (я это сделал). Запустите Delphi, выберите Project \ Import Type Library, найдите библиотеку объектов Microsoft Outlook 12.0, если ее там нет, вы можете добавить% programfiles% \ Microsoft Office \ Office12 \ msoutl.olb. Отметьте Generate Component Wrapper и укажите каталог модуля. Теперь нажмите Create Unit. Создаются Office_TLB.pas и Outlook_TLB.pas. - person The_Fox; 29.06.2010