Project

General

Profile

Использование динамической библиотеки - Isolator

Библиотека предназначена для использования различных COM объектов без регистрации их в реестре. При этом COM объекты реализуются в вызывающем Isolator.dll приложении.

Реализация

Библиотека Isolator[d].dll строится в составе солюшена DIGISPOT.sln и сохраняется в каталог EXE.

Isolator.dll не реализует никаких функций, а лишь перенаправляет вызовы обратно вызывающей стороне.

Isolator перенаправляет следующие функции:

DllCanUnloadNow

DllGetClassObject

DllRegisterServer

DllUnregisterServer

DllInstall

Для того, чтобы перечисленные функции могли перенаправлять вызов, необходимо инициализировать коллбэки (callback) при загрузке библиотеки библиотеки.

Сущестуют следующие функции для инициализации коллбэков:

InitCanUnloadNow

InitGetClassObject

InitRegisterServer

InitUnregisterServer

InitInstall

Для работы инициализируйте требуемые вызовы.

Пример использования

Пример:

1. Реализуйте функцию для обратного вызова:

STDAPI GetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)

{

if(riid != IID_IUnknown && riid != IID_IClassFactory)

return E_NOINTERFACE;

Factory* factory = new Factory();

if (!factory)

return E_OUTOFMEMORY;

HRESULT hr = factory->QueryInterface(riid, ppv);

if (FAILED (hr))

{

delete factory;

factory = NULL;

}

return NOERROR;

}

Функция должна создавать фабрику классов, в которой будет происходить создание вашего COM компонента.

2. Загрузите библиотеку Isolator.dll:

HMODULE IsolatorModule = CoLoadLibrary(L"Isolator.dll", FALSE);

DWORD addr = (DWORD)GetProcAddress(IsolatorModule, "InitGetClassObject");

if(addr){

*((DWORD*)&InitGetClassObject) = addr;

InitGetClassObject(local::GetClassObject); }

3. Добавление записи о COM объекте в манифест.

Внесите изменения в манифест библиотеки Isolator.dll, добавьте строку:

, где clsid - идентификатор созданного Вами COM объекта.

Add picture from clipboard (Maximum size: 742 MB)