Форум: "Основная";
Текущий архив: 2002.11.28;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.042 c