Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.07.2014, 08:39   #1
STRELOK-2007
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 144
Вопрос COM Singleton

Приветствую!

Где-то слышал, что для межпроцессного взаимодействия можно использовать COM Singleton библиотеку, в этом случае можно будет создать один объект-коннектор на два (или более) процесса.

Это после сокетов, я выбрал на данный момент лучшим вариантом.

1 вопрос:
Действительно ли можно сделать так?

2 вопрос:

Если можно. Что тогда я делаю не так?

Сам класс:
Код:
unit COMSingletonCLASS;

{$WARN SYMBOL_PLATFORM OFF}

interface

uses
  Windows, SysUtils, ActiveX, Classes, ComObj, COMSingleton_R_TLB, StdVcl;

type
  TCOMSingletonClass = class(TTypedComObject, ICOMSingletonClass)
   protected
    FCheck: WideString;
    FVerify: HRESULT;
    FInitialized: Boolean;

    function Check: WideString; stdcall;

    procedure InternalCreate; virtual;
    function Verify: HResult; stdcall;
    function Init: HResult; stdcall;

  end;

implementation

uses ComServ;

function TCOMSingletonClass.Check: WideString;
begin
 Result:= StringToOleStr(FCheck);
end;

procedure TCOMSingletonClass.InternalCreate;
var
 G: TGUID;
begin
 CreateGUID(g);
 FCheck:= GUIDToString(G);

 FVerify:= Random(100) * Random(100) * Random(100) * Random(100);
end;

function TCOMSingletonClass.Verify: HResult;
begin
 Result:= FVerify;
end;

function TCOMSingletonClass.Init: HResult;
begin
 if FInitialized then
  Result:=0
 else
  begin

 InternalCreate;
 Result:= 1;
  end;
end;

initialization
  TTypedComObjectFactory.Create(ComServer, TCOMSingletonClass, Class_COMSingletonClass,
    ciMultiInstance, tmApartment);
end.
Библиотека типов:
Код:
unit COMSingleton_R_TLB;

/////

var
 FClass: ICOMSingletonClass = nil;

implementation

uses System.Win.ComObj;

class function CoCOMSingletonClass.Create: ICOMSingletonClass;
begin
 if FClass = nil then
  FClass := CreateComObject(CLASS_COMSingletonClass) as ICOMSingletonClass;

 Result:= FClass;
end;

class function CoCOMSingletonClass.CreateRemote(const MachineName: string): ICOMSingletonClass;
begin
 if FClass = nil then
  FClass := CreateRemoteComObject(MachineName, CLASS_COMSingletonClass) as ICOMSingletonClass;

 Result:= FClass;
end;

end.
Так создаю в приложении:
Код:
var
 Factory: IUnknown;
begin
 Main:=nil;

 Factory:=CreateComObject(COMSingleton_R_TLB.CLASS_COMSingletonClass);
 Factory.QueryInterface(COMSingleton_R_TLB.IID_ICOMSingletonClass, Main);

 if Main = nil then
  Label5.Caption:='Fail'
 else
  Label5.Caption:='Success';

 UpdateMainClass;
end;
Результат вызова Check:


Заранее спасибо!
STRELOK-2007 вне форума Ответить с цитированием
Старый 23.07.2014, 19:48   #2
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

http://code.progler.ru/tags/Delphi,%...B8%D1%81%D1%8B
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 23.07.2014, 21:34   #3
STRELOK-2007
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 144
По умолчанию

Цитата:
Сообщение от Slym Посмотреть сообщение
С кодировкой у сайта какая то шляпа
STRELOK-2007 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Singleton Java Mila_ Помощь студентам 1 03.03.2014 11:04
Что то на подобие Singleton Dmitry333 Общие вопросы C/C++ 2 07.10.2012 14:58
Паттерн Singleton против функционального подхода FiloXSee Общие вопросы по программированию, компьютерный форум 11 31.07.2011 18:13
Singleton Selestis Общие вопросы Delphi 5 05.06.2011 13:38
паттерн singleton zhenya.ya Общие вопросы C/C++ 1 26.11.2010 03:11