Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > получить тип Ole значения в Variant


Автор: evgeny 24.8.2002, 20:40
Для работы из дельфи с Оffice-приложениями использую тип Variant.

var WordApp  : Variant ;
WordApp := CreateOleObject ('Word.Application') ;

Каким образом узнать , значение какого Ole-типа храниться в переменной Variant. Например:

var WishType : String ;
WishType := ЖелаемаяФункция(WordApp) ;
---------------------------------------------
Результат: WishType = 'Word.Application' ;

Автор: Fantasist 25.8.2002, 11:40
Впрямую никак. В Variant всего лишь сохраняется указатель на интерфейс IDispatch.

Автор: Dapo 26.8.2002, 12:50
не совсем то, что нужно, но думаю отсюда можно плясать:

....
var MyApp:Variant;
....
 MyApp:=CreateOleObject('Word.Application');
....
function GetAppName(App:Variant):string;
begin
 Result:=App.Name;
end;

В данном случае возвратит 'Microsoft Word'. Тривиально? ;-)
Естесственно будет работать только если переменная - Automation Object иначе - исключение.

Автор: Fantasist 27.8.2002, 11:08
Цитата
В данном случае возвратит 'Microsoft Word'. Тривиально?

Ага, а если объект поддерживает метод/проперти Name в каком-то своем контексте(а может и вообще не поддерживать), и возвратит овощь его знает что? Да и использовать такое имя довольно муторно и не надежно. Я думаю плясать надо от создания класса. Типа:
Код

TMyOleSrv=class
protected
    v:Variant;
    fGUID:TGUID;
    fProgID:String;
public
  constructor Create(ProgID:String);
  begin
     fGUID:=ProgIDToGUID(ProgID); //точно функцию не помню
     fProgID:=ProgID;
     v:=CreateOleObject(ProgID);
  end;

  destructor Destroy;
  begin
     v:=Unassigned;
  end;

  property OleObj:Variant read v; default;
  property GUID:TGUID read fGUID;
  property ProgID:String read ProgID;
end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)