Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
Delphi Вылетают потоки(связано с GIFImg) Приветствую. Нужна Ваша помощь. Есть программа которая распознает текст на картинке, делает она это в больших масштабах(до 300 потоков). И вот когда я запускаю софт хотябы в 50 потоков он повисает. Если убрать конструкцию try expect end , то потоки будут вылетать. В дебаге при ерроре выводило такое сообщение First chance exception at $74952005. Exception class GIFException with message... https://www.cyberforum.ru/ delphi/ thread927546.html Ошибка 'invalid pointer operation' Delphi
Я создал прогу которая делает скриншот экрана и передает её к клиенту. И у меня возникли такие проблемы во время работы у меня выходит ошибка 'invalid pointer operation' и как только нажал ок он продолжает дальше работать и обратно выскакивает эта ошибка помогите с ней разобраться. Так же нужно подумать как передавать положение мыши если у уменьшить изображение. Уменьшение изображение необходимо...
Delphi Мерцает битовый образ https://www.cyberforum.ru/ delphi/ thread927255.html
Доброго времени суток, проблема такая, в моей программе выводится два битовых образа: фон и человечек, причём у человечка свойство transparet равно trye. Проблему со смазыванием, сначала решал функцией copyrect. Потом нашёл более простой способ: в таймере сначала рисую фон затем человечка, кстати, человечек у меня спрайт, тобиш координаты человечка я не изменяю(мне не нужно чтобы он двигался), а...
Delphi Множества в Delphi XE https://www.cyberforum.ru/ delphi/ thread926623.html
Вопрос такой, я привык в Delphi 7 проверять в строке наличие определённых букв таким способом: var Test: String; begin Test := 'â'; if Test in then ShowMessage (Test) else ShowMessage ('Ïóñòàÿ ñòðîêà');
Функция конвертации байтовых массивов в SafeArray Delphi
Всем привет. В общем есть рабочая функция, которая конвертирует обычный массив типа byte в байтовый массив SafeArray, которая отлично работает в Delphi 7, но не работает в Delphi ХЕ4. function SafeArrayFromByteArray(pba: PByteArray; baSize: Integer) : PSafeArray; var bound: SAFEARRAYBOUND; psa: PSafeArray; pdata: pointer; begin bound.cElements := baSize;
Delphi Уничтожение SafeArray в Delphi XE https://www.cyberforum.ru/ delphi/ thread926405.html
Всем привет. Я перешел с Delphi 7 на Delphi XE4. В седьмой версии при создании элементов типа PSafeArray необходимо было самому следить за освобождением памяти, в частности после использования безопасного массива необходимо было его самому уничтожать через функцию SafeArrayDestroy(), чтобы не допустить утечки памяти. Вопрос такой, в Delphi XE существует мусорщик, который сам автоматически...
Delphi delphi + MS InfoPath подскажите пожалуйста как подключить в delphi + MS InfoPath https://www.cyberforum.ru/ delphi/ thread926298.html Delphi События в COM сервере на Delphi
Всем привет. В общем у меня такая проблема. Есть готовый OLE-Server из специального SDK в виде DLL для работы с бесконтактными смарт-картами. Мне необходимо создать свой СОМ-сервер с моими функциями, которые бы могли обращаться к этому стороннему DLL из SDK. Другими словами из моего собственного COM-сервера должен вызываться другой COM-сервер. Это вообще возможно? Есть одна загвоздочка. DLL...
Delphi как совместить Delphi 7 и windows 8 как совместить Delphi 7 и windows 8 https://www.cyberforum.ru/ delphi/ thread926098.html Delphi Delphi работа с Socet ами https://www.cyberforum.ru/ delphi/ thread925889.html
Проблема такая - есть два exe файла Первый клиент, второй сервер, между ними я сделал интернет чат . когда включаю на компе их в клиенте ввожу общий ip 127.0.0.1(localhost) то все работает могу писать как с сервера так и клиента, но я клиент отправил другу он вводит Ip моего компа (при запущенном сервере на моем компе) я его взял на 2ип.ру то у него выдает ошибку Asynchronous sjcket error...
Программа кушает память в отладочном режиме Delphi
Всем доброго времени суток! Суть: Есть Embarcadero RAD Studio XE2, есть программа, написанная на Delphi и есть проблема с утечкой памяти, причем память съедается именно при запуске программы в режиме отладки. Обычный запуск такого эффекта не дает. На компьютере коллеги ни в Delphi7, ни в том же RAD Studio такой проблемы не наблюдается. Подскажите пожалуйста где рыть.
Delphi Программа для общения, передачи файлов и удалённого управления в Delphi Уважаемые программисты! Я хочу создать программу для общения, передачи файлов и удалённого управлениям по локальной сети в Delphi. Программа как для общения она у меня получилась но проблемы с передачей файлов. Помогите решить эту проблему. Если смогу сделать передачу файлов то и получиться создать удалённое управление компьютером. Но не надо спрашивать зачем я это делаю если такие программы уже... https://www.cyberforum.ru/ delphi/ thread925358.html
7 / 7 / 1
Регистрация: 21.10.2012
Сообщений: 232
24.07.2013, 20:35  [ТС] 0

Клиент OLE Automation, реализация класса стока событий - Delphi - Ответ 4875430

24.07.2013, 20:35. Показов 2643. Ответов 4
Метки (Все метки)

Ответ

В общем всё оказалось проще, чем я думал. И не нужны никакие левые утилиты. Достаточно добавить типы событий на сервере, далее после этого этот сервер прогоняем через импорт библиотеки типов с галкой на Wrapper-модуле в проекте клиента (для автоматического создания SINK). После этого необходимо создать процедуры с любым именем, объявленные в форме, и присвоить адрес этих функций событиям на сервере. И после этого все события спокойно будут приниматься в клиенте, а сама инициализация Sink занимает всего пару строк (ниже показан пример такой формы).

Вопрос!

У меня сервер выполнен в виде EXE файла с одной формой. В форме идет работа с сторонним сервером, от которого я получаю кое-какие события. Мне нужно сделать так, чтобы при получении событий от стороннего сервера на моём сервере генерировались уже мои события моим клиентам. Коклас реализован в отдельном файле.

Вот пример реализации кокласа сервера (не моего, но у меня всё очень похоже):

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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
unit lbAuto_Unit;
 
{$WARN SYMBOL_PLATFORM OFF}
 
interface
 
uses  ComObj, ActiveX, AxCtrls, Classes, automsrv_TLB, StdVcl;
 
type
  TlbAuto = class(TAutoObject, IConnectionPointContainer, IlbAuto)
  private
    FConnectionPoints: TConnectionPoints;
    FConnectionPoint: TConnectionPoint;
    FEvents: IlbAutoEvents;
  public
    procedure Initialize; override;
 
  protected
    procedure AddLine(Line: OleVariant); safecall;
    procedure DeleteLine(Index: Integer); safecall;
    procedure SortLines; safecall;
    function  Get_Count: Integer; safecall;
 
    property ConnectionPoints: TConnectionPoints read FConnectionPoints
      implements IConnectionPointContainer;
    procedure EventSinkChanged(const EventSink: IUnknown); override;
 
  end;
 
implementation
 
uses ComServ, MainServer;
 
procedure TlbAuto.EventSinkChanged(const EventSink: IUnknown);
begin
  FEvents := EventSink as IlbAutoEvents;
end;
 
procedure TlbAuto.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 TlbAuto.AddLine(Line: OleVariant);
var X:Integer;
begin
 frmMainServer.ListBox1.Items.Add(Line);
 X:=frmMainServer.ListBox1.Count;
 if FEvents<>nil then FEvents.OnChange(X); //здесь главное вот эта строка,
                           //она создает событие для клиента
end;
 
procedure TlbAuto.DeleteLine(Index: Integer);
var X:Integer;
begin
 frmMainServer.ListBox1.Items.Delete(Index);
 X:=frmMainServer.ListBox1.Count;
 if FEvents<>nil then FEvents.OnChange(X);
end;
 
procedure TlbAuto.SortLines;
begin
 if FEvents<>nil then FEvents.OnBeforeSort;
 frmMainServer.ListBox1.Sorted:=true;
 if FEvents<>nil then FEvents.OnAfterSort;
end;
 
function TlbAuto.Get_Count: Integer;
begin
  Result:=frmMainServer.ListBox1.Count;
end;
 
 
initialization
  TAutoObjectFactory.Create(ComServer, TlbAuto, Class_lbAuto,
    ciMultiInstance, tmApartment);
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
unit Unit1;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs;
 
type
  TForm1 = class(TForm)
  private
  public
 
    procedure Event1 (ASender: TObject);
end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
// Событие формы OnCreate
var
  I: TInteface;
begin
    I := TInteface.Create(nil);
    I.Event1 := Event1; // здесь идет присваивание адреса функции в метод события
end;
 
procedure TForm1.Event1(ASender: TObject);
begin
// здесь я получаю событие от другого сервера
// и здесь необходимо сгенерировать событие  FEvents.OnChange(X) от моего сервера 
end;
  
end.
Вопрос такой, как мне из процедуры TForm1.Event1 вызвать событие моего сервера FEvents.OnChange(X)? Пробовал добавлять в uses файл кокласа, а переменную FEvent объявлять публичной, ничего не получается.

Добавлено через 12 часов 16 минут
Кому интересно решение этой проблемы, то в книге Елмановой "Delphi и технология COM" всё прекрасно написано.

Вернуться к обсуждению:
Клиент OLE Automation, реализация класса стока событий Delphi
0
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.07.2013, 20:35
Готовые ответы и решения:

Об OLE Automation
Извините за простой вопрос: Задача такая сперва записать данные в Excel, потом их прочесть...

MS Access и OLE Automation
В MS Access есть команда Создание-&gt;Таблица, которая создаёт пустую таблицу. Как можно через OLE...

1c Ole Automation Server
Требуется интеграция 1-С Предприятия с други хранилищем данных. Я нашел что один из способов это...

Как использовать OLE Automation в c#?
как юзать сабж в частности не работает xxx = new V77.Application() ; хотя с xxx = new...

4
24.07.2013, 20:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.07.2013, 20:35
Помогаю со студенческими работами здесь

Как использоваьб OLE automation?
как использоваьб OLE automation в частности V77.Application ????

Rational Rose via COM (OLE Automation)
У кого-нибудь есть опыт использования ? Добавлено через 12 часов 41 минуту 22 секунды Уточним....

1c V8.x: Оформление Таблицы Word. Ole Automation.
Создается таблица в Word. Как задать цвет границ таблицы??? Rng8.I_nsertAfter(&quot;1, 2, 3&quot;);...

Создание сервера автоматизации (OLE Automation)
Здравствуйте! Есть неистовое желание написать на C# простую утилиту, функционал которой был бы...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru