OleFunction

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Виталий
новенький
Сообщения: 40
Зарегистрирован: 05.01.2013 22:33:11

OleFunction

Сообщение Виталий »

Всем привет. Есть ли в Лазарусе возможность использования OleFunction(), как это предусмотренно в Делфи в типе Olevariant?
Допустим если я хочу вызвать функцию из СОМ сервера по имени вбитой в Эдит, а не жестко прописанной в программе?

Использую FPC 2.6.4 и Lazarus 1.2.4
sign
энтузиаст
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Сообщение sign »

Из

Код: Выделить всё

//******************************************************************************
//*                    Written by Yuri (aka Yuric74)                           *
//*           http://www.sql.ru/forum/actualthread.aspx?tid=405083             *
//*                 all version at http://yuri.elmeh.ru                        *
//******************************************************************************
unit uOpenOffice;

переделанной местами под Лазарус.
В частности, вот такое

Код: Выделить всё

function TOOWriterCell.GetDataType:TOpenDT;
begin
  Result:=FCellObj.Type;
end;
не проканывает, потому заменил на допустимое

Код: Выделить всё

function TOOWriterCell.GetDataType:TOpenDT;
begin
  Result:=FCellObj.getType;
end;

Код: Выделить всё

  protected
    property SheetObj:variant read FSheetObj write FSheetObj;
...
function TOOCalcSheet.GetUsedArea: TOpenRangeAddress;
var
  v:variant;
begin
  v:=SheetObj.CreateCursor;
  v.GotoStartOfUsedArea(false);
  Result.Sheet:=v.RangeAddress.Sheet;
  Result.StartColumn:=v.RangeAddress.StartColumn;
  Result.StartRow:=v.RangeAddress.StartRow;
  v.GotoEndOfUsedArea(false);
  Result.EndColumn:=v.RangeAddress.EndColumn;
  Result.EndRow:=v.RangeAddress.EndRow;
  v:=Unassigned;
end;


Или вы о другом?
Для меня эти сом, ole и пр. не моя атмосфера.
Виталий
новенький
Сообщения: 40
Зарегистрирован: 05.01.2013 22:33:11

Сообщение Виталий »

Да, я о другом. В Builder C++ из пакетов RAD Studio уже оч. давно есть возможность вызвать метод или свойство по его имени не прописав его жестко в программе. В некую функцию передается строка, по этой строке вызывается свойство интерфейса. Вот я тоже хочу такое но в Лазарусе.
Я то понимаю что Билдер и Лазарус и рядом не валяются, но все же.
Аватара пользователя
*Rik*
постоялец
Сообщения: 453
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал
Контактная информация:

Сообщение *Rik* »

Виталий писал(а):Да, я о другом. В Builder C++ из пакетов RAD Studio уже оч. давно есть возможность вызвать метод или свойство по его имени не прописав его жестко в программе. В некую функцию передается строка, по этой строке вызывается свойство интерфейса. Вот я тоже хочу такое но в Лазарусе.
Я то понимаю что Билдер и Лазарус и рядом не валяются, но все же.

Можно сделать самому, если есть желание, объем не сильно большой. Вам нужно только правильно вызывать IDispatch.Invoke. Если есть желание поразбираться, могу скинуть кусок кода реализующий вызовы IDispatch.Invoke из своих наработок.
Может очень помочь книга, авторы Тейксейра, С. Пачеко К. "Borland Delphi. Руководство разработчика". У меня она печатная в 2х томах для Delphi 5. Там очень хорошо описано как работает и как использовать механизм работы с IDispatch.
Виталий
новенький
Сообщения: 40
Зарегистрирован: 05.01.2013 22:33:11

Сообщение Виталий »

Спасибо, я как раз разбиваюсь с IDispatch.
вроде понял в какую сторону двигаться.
Ответить