2010-06-29 3 views
0

Я преобразования следующий пример кода в Delphi:Как передать строковые индексы для OleVariant

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 дает ошибку: Несовместимые типы: Целое и строка.

Должен ли я использовать другой вариант?

ТИА

ответ

3

Я принял взглянуть на блок Outlook, генерируемой из файла TLB и это выглядит следующим образом:

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

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

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

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

+0

Thanks The_Fox. FTR, я проверял источник Outlook, но у меня только до Outlook XP, а GetTable не был представлен до Outlook 2007. – Xanyx

+0

Вы можете сами создать эти файлы (я сделал). Запустите Delphi, выберите Project \ Import Type Library, найдите библиотеку объектов Microsoft Outlook 12.0, если ее там нет, вы можете добавить% programfiles% \ Microsoft Office \ Office12 \ msoutl.olb. Проверьте «Сгенерировать компонентную упаковку» и укажите единицу. Теперь нажмите «Создать блок». Создаются Office_TLB.pas и Outlook_TLB.pas. –

+0

Отлично, спасибо – Xanyx