Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.28;
Скачать: CL | DM;

Вниз

COM и IGlobalInterfaceTable   Найти похожие ветки 

 
doublebug   (2002-11-15 12:11) [0]

Привет всем
Кто-нить использовал IGlobalInterfaceTable интерфейс
в дельфях или это прерогатива VC ?
Ну или наводочку как это дело заюзать ?


 
Skier ©   (2002-11-15 12:15) [1]

>doublebug
Что хочешь сделать ?


 
doublebug   (2002-11-15 17:04) [2]

пул указателей на интерфейсы доступный из нескольких апартаментов


 
doublebug   (2002-11-16 16:48) [3]

Вот может кому понадобится
модуль для работы с GlobalInterfaceTable


unit GIT;

interface

uses SysUtils, Windows;

const

IID_IGlobalInterfaceTable: TGUID = "{00000146-0000-0000-C000-000000000046}";
CLSID_StdGlobalInterfaceTable: TGUID = "{00000323-0000-0000-C000-000000000046}";

type

EGITExeption = class(Exception);

IGlobalInterfaceTable = interface(IUnknown)
["{00000146-0000-0000-C000-000000000046}"]
function RegisterInterfaceInGlobal(const pUnk: IUnknown; const riid: TGUID;
out dwCookie: DWORD): HResult; stdcall;
function RevokeInterfaceFromGlobal(dwCookie: DWORD): HResult; stdcall;
function GetInterfaceFromGlobal(dwCookie: DWORD; const riid: TGUID;
out ppv): HResult; stdcall;
end;

{Add interface pointer to GIT and cookie for it}
function RegisterInterfaceInGlobal(const pUnk: IUnknown; riid: TGUID): DWORD;
procedure RevokeInterfaceFromGlobal(dwCookie: DWORD);
function GetInterfaceFromGlobal(dwCookie: DWORD; const riid: TGUID): IUnknown;

implementation

uses ActiveX;

var
gGIT : IGlobalInterfaceTable;

procedure CheckGIT;
begin
if gGIT = nil then
raise EGITExeption.Create("GIT initialization failed");
end;

function RegisterInterfaceInGlobal(const pUnk: IUnknown; riid: TGUID): DWORD;
begin
CheckGIT;
gGIT.RegisterInterfaceInGlobal(pUnk, riid, Result);
end;

procedure RevokeInterfaceFromGlobal(dwCookie: DWORD);
begin
CheckGIT;
gGIT.RevokeInterfaceFromGlobal(dwCookie);
end;

function GetInterfaceFromGlobal(dwCookie: DWORD; const riid: TIID): IUnknown;
begin
CheckGIT;
gGIT.GetInterfaceFromGlobal(dwCookie,riid,Result);
end;

initialization
gGIT := nil;
CoCreateInstance(CLSID_StdGlobalInterfaceTable,
nil,
CLSCTX_INPROC_SERVER,
IID_IGlobalInterfaceTable,
gGIT);
finalization
if gGIT <> nil then
gGIT._Release;
end.


 
doublebug   (2002-11-17 14:45) [4]

Сорри за пред пост вот код который прошел стресс тест


unit GIT;

interface

uses SysUtils, Windows;

const

IID_IGlobalInterfaceTable: TGUID = "{00000146-0000-0000-C000-000000000046}";
CLSID_StdGlobalInterfaceTable: TGUID = "{00000323-0000-0000-C000-000000000046}";

type

EGITExeption = class(Exception);

IGlobalInterfaceTable = interface(IUnknown)
["{00000146-0000-0000-C000-000000000046}"]
function RegisterInterfaceInGlobal(const pUnk: IUnknown; const riid: TGUID;
out dwCookie: DWORD): HResult; stdcall;
function RevokeInterfaceFromGlobal(dwCookie: DWORD): HResult; stdcall;
function GetInterfaceFromGlobal(dwCookie: DWORD; const riid: TGUID;
out ppv): HResult; stdcall;
end;

{Add interface pointer to GIT and cookie for it}
function RegisterInterfaceInGlobal(const pUnk: IUnknown; riid: TGUID): DWORD;
procedure RevokeInterfaceFromGlobal(dwCookie: DWORD);
function GetInterfaceFromGlobal(dwCookie: DWORD; const riid: TGUID): IUnknown;

implementation

uses ActiveX;


//initializes GIT in every apartment;
function CheckGIT: IGlobalInterfaceTable;
begin
Result := nil;
CoCreateInstance(CLSID_StdGlobalInterfaceTable,
nil,
CLSCTX_INPROC_SERVER,
IID_IGlobalInterfaceTable,
Result);

if Result = nil then
raise EGITExeption.Create("GIT initialization failed");
end;

function RegisterInterfaceInGlobal(const pUnk: IUnknown; riid: TGUID): DWORD;
begin
CheckGIT.RegisterInterfaceInGlobal(pUnk, riid, Result);
end;

procedure RevokeInterfaceFromGlobal(dwCookie: DWORD);
begin
CheckGIT.RevokeInterfaceFromGlobal(dwCookie);
end;

function GetInterfaceFromGlobal(dwCookie: DWORD; const riid: TIID): IUnknown;
begin
CheckGIT.GetInterfaceFromGlobal(dwCookie,riid,Result);
end;

end.



Страницы: 1 вся ветка

Текущий архив: 2002.11.28;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.011 c
1-93048
Ascan_
2002-11-19 15:48
2002.11.28
Смена активности окна


14-93247
Дмитрий К.К.
2002-11-10 22:34
2002.11.28
Явно ограниченный набор возможностей форумов


14-93196
Cobalt
2002-11-08 22:05
2002.11.28
Закончилась встреча мастаков Московии


14-93198
Вождь племени Мумба-Юмба
2002-11-09 17:07
2002.11.28
Братство народов


1-93076
Checist [root]
2002-11-16 13:29
2002.11.28
СРОЧНО НУЖНА ПОМОЩЬ