Форум программистов, компьютерный форум CyberForum.ru

Delphi и WinAPI

Войти
Регистрация
Восстановить пароль
 
elite001
0 / 0 / 0
Регистрация: 31.05.2015
Сообщений: 22
#1

COM object/Automation - Delphi WinAPI

27.10.2016, 12:38. Просмотров 399. Ответов 2
Метки нет (Все метки)

Всем привет и хорошего настроения,
экспериментирую тут с объектами автоматизации, а именно хочу не длл сделать, а exe, запущен ехе - можно подключиться из другой проги, имея в наличии интерфейсы и методы, долго читал разные статьи и прочие заметки, долго не понимал, почему ошибка "Interface not Supported", случайно на форуме увидел, что ехе-сервер нужно разок запустить через \RegServer и тогда все подключается, методы отрабатываются, правда если ехе-сервер не запущен, при вызове методов из другой программы, он запускается, а при закрытии вызывающей программы и сервер закрывается...
вопрос, а действительно нужен этот параметр \RegServer, без него никак?

для чего: ехспиренс, фан, создать приложение, с интерфейсами и методами, создать ком враппер в виде длл,которую зарегистрирую через regsvr32 и обращаться к приложению через эту длл из другой программы, управлять им в общем...


Всем спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.10.2016, 12:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос COM object/Automation (Delphi WinAPI):

Клиент OLE Automation, реализация класса стока событий - Delphi
Всем привет. Задача такая, есть сервер и клиент OLE Automation. У сервера есть несколько событий, которые должны передаваться клиенту....

Object Pascale - Delphi
Доброго времени суток Вот мое условие: При открытии форму через OpenDialog прочитать текстовый файл со строками. На форме много...

Object Pascal (Delphi) - Delphi
1. Нужно написать программу на языке Object Pascal (Delphi), чтобы она переводила метры в футы и обратно. 2. Написать программу на языке...

Вывод переменной типа object - Delphi
Есть переменная alc типа object, в ней объявлена переменная типа y:double ее необходимо вывести на label Такой вывод не срабатывает ...

Проблемы с лабой по Object Pascal - Delphi
На форме 1 кнопка,1 надпись,1 едит и 1 мемо.Вводится строка из нескольких слов и чисел,разделенных неопределенным числом пробелов.Выбрать...

Компонент, похожий на Object Inspector - Delphi
Всем привет. Хочется иметь возможность быстро создавать форму или панель для настройки свойств в проге, свойства могут иметь тип число,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MyEternity
84 / 84 / 19
Регистрация: 25.04.2016
Сообщений: 452
27.10.2016, 14:34 #2
Цитата Сообщение от elite001 Посмотреть сообщение
долго читал разные статьи и прочие заметки
1. Видимо не долго....
Цитата Сообщение от elite001 Посмотреть сообщение
долго не понимал
2. Видимо и сейчас не понимаете.
Цитата Сообщение от elite001 Посмотреть сообщение
вопрос, а действительно нужен этот параметр \RegServer, без него никак?
Ответ: да, действительно. Да, без него никак, смотрите пункт 2.
elite001
0 / 0 / 0
Регистрация: 31.05.2015
Сообщений: 22
28.10.2016, 11:49  [ТС] #3
Цитата Сообщение от MyEternity Посмотреть сообщение
Сообщение от elite001
долго читал разные статьи и прочие заметки
1. Видимо не долго....
Сообщение от elite001
долго не понимал
2. Видимо и сейчас не понимаете.
Сообщение от elite001
вопрос, а действительно нужен этот параметр \RegServer, без него никак?
Ответ: да, действительно. Да, без него никак, смотрите пункт 2.
не понимаю, согласен..
Действительно без регистрации никак..
подскажите еще, пожалуйста, если я добавлю созданный мной интерфейс к наследуемым элементам класса (надеюсь выразился правильно)
т.е.
Delphi
1
TForm1 = class(TForm,IMyInt)
что мне нужно сделать, как объявить функцию, чтобы она срабатывала?
пытался так
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
type
  TForm1 = class(TForm,IMyInt)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  protected
    Procedure Method_2(const pS: WideString);safecall;
    procedure IMyInt.Method_1 = Method_2;
    //procedure Method_1(const pS: WideString);safecall;
  private
  public
 end;
соответственно
Delphi
1
2
3
4
5
procedure TForm1.Method_2(const pS: WideString);
begin
  form1.Caption:=pS;
  messagebox(0,'100','',0);
end;
но ничего не происходит, я уже запутался =( что-то надо инициализировать?
перерегистрировал ехе'шник..
код юнита с интерфейсом, строка в комменте срабатывает..
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
unit Unit2;
 
{$WARN SYMBOL_PLATFORM OFF}
 
interface
 
uses
  ComObj, ActiveX, AxCtrls, Classes,
Project1_TLB, StdVcl,windows;
 
type
  TMyInt = class(TAutoObject, IConnectionPointContainer, IMyInt)
  private
    { Private declarations }
    FConnectionPoints: TConnectionPoints;
    FConnectionPoint: TConnectionPoint;
    FEvents: IMyIntEvents;
    { note: FEvents maintains a *single* event sink. For access to more
      than one event sink, use FConnectionPoint.SinkList, and iterate
      through the list of sinks. }
  public
    procedure Initialize; override;
  protected
    procedure Method_1(const pS: WideString); safecall;
    { Protected declarations }
    property ConnectionPoints: TConnectionPoints read FConnectionPoints
      implements IConnectionPointContainer;
    procedure EventSinkChanged(const EventSink: IUnknown); override;
 
  end;
 
implementation
 
uses ComServ;
 
procedure TMyInt.EventSinkChanged(const EventSink: IUnknown);
begin
  FEvents := EventSink as IMyIntEvents;
end;
 
procedure TMyInt.Initialize;
begin
  inherited Initialize;
  FConnectionPoints := TConnectionPoints.Create(Self);
  if AutoFactory.EventTypeInfo <> nil then
    FConnectionPoint := FConnectionPoints.CreateConnectionPoint(
      AutoFactory.EventIID, ckSingle, EventConnect)
  else FConnectionPoint := nil;
end;
 
 
procedure TMyInt.Method_1(const pS: WideString);
begin
//  messagebox(0,PWIDEChar(pS),'',0);
end;
 
initialization
  TAutoObjectFactory.Create(ComServer, TMyInt, Class_MyInt,
    ciMultiInstance, tmApartment);
end.

спасибо за наставления!

Добавлено через 53 минуты
В общем я совсем запутался в этих интерфейсах, ком объектах и прочем... если в юнит2 добавить в секцию юзес юнит1 и в методе уже оперировать с form1, то все работает, в принципе - то что мне и нужно.. но как теперь вызывать евенты?

Добавлено через 19 часов 9 минут
просто шикарнейшая статья про евенты и комы...
изложено доступно и понятно.. спасибо всем!!!
HTML5
1
http://edn.embarcadero.com/article/27126
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.10.2016, 11:49
Привет! Вот еще темы с ответами:

Выравнивание окна Object Inspector - Delphi
У меня такая проблема ....окно обжект инспектор как видно на картинке уходит далеко вниз за пределы экрана....если его вытаскиваю то при...

InOut (Object Pascal) куда он делся? - Delphi
Добрый вечер, господа. Почему, когда я дописываю к разделу uses - InOut, Delphi выдаёт ошибку: &quot;Cannot resolve unit name &quot;InOut&quot; at line 3...

Ошибка Constant object cannot be passed as var parameter - Delphi
Привет. При пропускание через функции Insert и Delete, выдает ошибку(в название темы). Перевод примерно такой: Константа не может бы...

У меня выдает ошибку [Error] MainModule.pas(43): Record, object or class type required - Delphi
unit MainModule; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru