Создание и регистрация библиотеки DLL прокси-сервера
Если вы выбрали маршалинг прокси-сервера или заглушки для приложения, файлы C и H, созданные MIDL, должны быть скомпилированы и связаны с созданием библиотеки DLL-сервера, и эта библиотека DLL должна быть введена в системный реестр, чтобы клиенты могли находить свои интерфейсы. Созданный MIDL-файл Dlldata.c содержит необходимые подпрограммы и другие сведения для создания и регистрации библиотеки DLL-сервера или заглушки.
Первым шагом в создании библиотеки DLL является запись файла определения модуля для компоновщика, как показано в следующем примере:
LIBRARY example.dll
DESCRIPTION 'generic proxy/stub DLL'
EXPORTS DllGetClassObject @1 PRIVATE
DllCanUnloadNow @2 PRIVATE
DllRegisterServer @4 PRIVATE
DllUnregisterServer @5 PRIVATE
Кроме того, эти экспортированные функции можно указать в командной строке LINK файла makefile.
Экспортированные функции объявляются в Rpcproxy.h, которые включают dlldata.c, и реализации по умолчанию являются частью библиотеки времени выполнения RPC. COM использует эти функции для создания фабрики классов, выгрузки БИБЛИОТЕК DLL (после того, как не существует объектов или блокировок), получения сведений о библиотеке DLL прокси-сервера и самостоятельной регистрации и отмены регистрации библиотеки DLL-сервера. Чтобы воспользоваться этими предопределенными функциями, необходимо вызвать параметр Cpreprocessor /D (или -D) при компиляции файлов Dlldata.c и Example_p.c, как показано в следующем файле makefile:
example.h example.tlb example_p.c example_i.c dlldata.c : example.idl
midl example.idl
dlldata.obj : dlldata.c
CL /c /DWIN32 /DREGISTER_PROXY_DLL dlldata.c
example.obj : example_p.c
CL /c /DWIN32 /DREGISTER_PROXY_DLL example_p.c
iids.obj : example_i.c
PROXYSTUBOBJS = dlldata.obj example.obj iids.obj
PROXYSTUBLIBS = kernel32.lib rpcndr.lib rpcns4.lib rpcrt4.lib uuid.lib
proxy.dll : $(PROXYSTUBOBJS) example.def
link /dll /out:proxy.dll /def:example.def
$(PROXYSTUBOBJS) $(PROXYSTUBLIBS)
regsvr32 /s proxy.dll
Если эти определения препроцессора не указываются во время компиляции, эти функции не определяются автоматически. (То есть макросы в Rpcproxy.c разворачиваются до ничего.) Необходимо явно определить их в другом исходном файле, модуль которого также будет включен в окончательную компоновку и компиляцию в командной строке компилятора C.
При определении REGISTER_PROXY_DLL Rpcproxy.h предоставляет дополнительный элемент управления условной компиляции с PROXY_CLSID=guid, PROXY_CLSID_IS=явное значение guid и строку префикса ENTRY_PREFIX=префикс. Эти определения макросов подробно описаны в определениях компилятора C для прокси/заглушки в руководстве программиста MIDL.
Регистрация библиотеки DLL прокси-сервера вручную
Если по какой-то причине вы не можете использовать процедуры регистрации заглушки прокси-сервера по умолчанию, можно вручную зарегистрировать библиотеку DLL, добавив следующие записи в системный реестр с помощью Regedt32.exe.
HKEY_CLASSES_ROOT
Interface
iid
(Default) = ICustomInterfaceName
ProxyStubClsid32 = {clsid}
HKEY_CLASSES_ROOT
CLSID
clsid
(Default) = ICustomInterfaceName_PSFactory
InprocServer32 = proxstub.dll
См. также