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

Delphi и WinAPI

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

COM object/Automation - Delphi WinAPI

27.10.2016, 12:38. Просмотров 391. Ответов 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
Посмотрите здесь:

VBScript - существование automation object - JavaScript
Прошу прощение за банальный вопрос. Как на VBScript красиво и лаконично проверить, существует ли control c заданным именем - dim...

Ошибка 'Automation server can't create object' - C# ASP.NET
... в чем проблема. Пишу на JScript. На попытку открыть файл Excel методом new ActiveXObject('Excel.Application'); в ответ мне...

Method 'cell' not supported by automation object - Delphi
добрый вечер. не понимаю в чем ошибка ... var Form4: TForm4; MRow,MCol:integer; table:variant; implementation {$R...

Ошибка: Method HorizontalAlligment not supported by automation object - Delphi
Здравствуйте. При работе с Excel выдал ошибку "Method HorizontalAlligment not supported by automation object". Код программы: ...

Заполнение формы в брузере. Фрейм ошибка method value not supported by automation object - Delphi
Делаю автозаполнение формы в делфи. Собственно все было идеально до тех пор пока не дошел до формы в фрейме method value not supported by...

Uncaught TypeError: Object [object Object] has no method - jQuery
Всем привет. Я новичок в этой сфере. у меня возникла ошибка в консоли при добавлении карусели на сайт: "Uncaught TypeError: Object has...

Получение имени объекта. Функция public String getName(Object object) {...} - Java
К примеру есть объекты: Object myObject111 = new Object(); File parentDirectory = new File(); Хочу такую функцию: public String...

Скрипт не работает - NullReferenceException: Object reference not set to an instance of an object MissionSay.S - Unity, Unity3D
Нужный элемент со скриптом MissionPlayer.cs есть Версия Unity: 5.4.1 Код: using UnityEngine; using System.Collections;

Нулевые значения баз данных. Object reference not set to an instance of an object - C#
В базе данных существуют пустые поля. Из базы осуществляется вывод на веб страницу в поля ввода. Поля соответствующие нулевым значениям...

.NET 4.x Передача строки из GridView: Object reference not set to an instance of an object - C# ASP.NET
Ахтунг!) Не разберусь где я не установил ссылку оО Выскакует когда я хочу передать строку из Грида... Вот скрин:

Ошибка времени выполнения: Object reference not set to an instance of an object - Pascal ABC
Делал задачу begin 1 в paskalABC.net . Program aaaaaalegko; uses pt4; var a,p:real; begin Task('Begin1'); readln(a); ...

Ошибка времени выполнения: Object reference not set to an instance of an object - PascalABC.NET
Есть код - в TP он нормально проходит компиляцию, а вот в PABC.net выдает ошибку - видимо я не понимаю каких то нюансов в различии TP и...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MyEternity
84 / 84 / 19
Регистрация: 25.04.2016
Сообщений: 453
27.10.2016, 14:34     COM object/Automation #2
Цитата Сообщение от elite001 Посмотреть сообщение
долго читал разные статьи и прочие заметки
1. Видимо не долго....
Цитата Сообщение от elite001 Посмотреть сообщение
долго не понимал
2. Видимо и сейчас не понимаете.
Цитата Сообщение от elite001 Посмотреть сообщение
вопрос, а действительно нужен этот параметр \RegServer, без него никак?
Ответ: да, действительно. Да, без него никак, смотрите пункт 2.
elite001
0 / 0 / 0
Регистрация: 31.05.2015
Сообщений: 22
28.10.2016, 11:49  [ТС]     COM object/Automation #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
Yandex
Объявления
28.10.2016, 11:49     COM object/Automation
Ответ Создать тему
Опции темы

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