Главная страница
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-93030
UnDISCOvery
2002-11-18 18:32
2002.11.28
Использование общих ресурсов dll 2мя процессами.


3-92834
Zn
2002-11-12 13:57
2002.11.28
Работа приложения с dbf-файлами на другой машине.


6-93161
начинающий програмер
2002-09-24 17:53
2002.11.28
FileMon и RegMon


1-92966
Трое из Леса
2002-11-18 13:51
2002.11.28
Реестр


1-93033
Andrei_
2002-11-19 13:20
2002.11.28
Выравнивание строк в ListBox