Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-93099
VJar
2002-11-16 15:37
2002.11.28
Ошибка при работе с типизованным файлом


14-93205
Nico1a
2002-11-07 22:08
2002.11.28
Ищу хостинг


1-93070
ЮРИЙ_К
2002-11-16 10:30
2002.11.28
Назойливый Warning компилятора


3-92859
EDDI
2002-11-08 11:09
2002.11.28
Блокировка записи в PARADOX


1-92978
Linder
2002-11-18 11:49
2002.11.28
В качестве индексов - стринги.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский