Поделиться через


Создание и регистрация библиотеки 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

Определения компилятора C для прокси-сервера или заглушки

Регистрация COM-серверов

Самостоятельная регистрация