Файл
описания DLL
Для успешной
работы DLL следует добавить к проекту файл ее описания (DEF-файл). Этот способ
является альтернативным и, возможно, более простым, чем использование описателей
_declspec(dllexport) для экспортируемых функций.
DEF-файл сопровождает
DLL и содержит список функций, экспортируемых ею. Создайте новый файл MyCom.def
и введите в него такие строки:
LIBRARY
"MYCOM.dll"
EXPORTS
DllGetClassObject PRIVATE
Заметим, что
теперь нет необходимости нумеровать экспортируемые функции, как это делалось
ранее (например, в рамках Visual Studio 6). Там вы должны были бы задать:
DllGetClassObject
@1 PRIVATE
При наличии
DEF-файла компоновщик создает (кроме основного файла библиотеки MyCom.dll) еще
два необходимых файла: MyCom.lib (заголовков экспортируемых функций) и МуСот.ехр
(информации об экспортируемых функциях и классах). При отсутствии последних
двух файлов система не сможет обратиться к функции DllGetClassObject, а следовательно,
и к нашему СОМ-объекту CoSay. Для того чтобы DEF-файл участвовал в процессе
сборки DLL, в рамках Visual Studio 6 его достаточно было лишь подключить к проекту.
Этого шага, однако, недостаточно в рамках Studio.Net. Надо сделать такую установку:
- Установите фокус на строке
МуСот в окне Solution Explorer и дайте команду View > Propertiy
Pages.
- Раскройте узел Linker
> Input в дереве левого окна диалога MyCom Property Pages и введите имя
MyCom.def в строку Module Definition File списка свойств.
- Нажмите кнопку ОК.
Следующим шагом
вы должны зарегистрировать сервер, то есть внести в реестр Windows записи, которые
регистрируют факт существования и местоположение DLL. При работе с ATL это действие
будет автоматизировано, но сейчас создайте и подключите к проекту еще один файл
MyCom.reg, формат которого соответствует командам регистрации, воспринимаемым
редактором реестра RegEdit.exe. При этом вам, вероятна, придется действовать
альтернативным способом, описанным выше. По крайней мере в бета-версии Studio.Net,
с которой я имею дело, в списке типов добавляемых файлов отсутствует тип REG.
В текст, приведенный ниже, вы должны подставить идентификаторы, соответствующие
вашей регистрации, а также ваш путь к файлу MyCom.dll:
REGEDIT
HKEY_CLASSES_ROOT\MyCom.CoSay\CLSID
=
{9B865820-2FFA-lld5-98B4-OOE0293F01B2}
HKEY_CLASSES_ROOT\CLSID\
{9B865820-2FFA-lld5-98B4-OOE0293F01B2}
=
MyCom.CoSay
HKEY_CLASSES_ROOT\CLSID\
{9B865820-2FFA-lld5-98B4-OOE0293F01B2}
\InprocServer32
= D:\MyCom\Debug\MyCom.dll
Обратите внимание
на то, что текст каждой из трех команд не должен разрываться символами перехода
на другую строку. В книге мы вынуждены делать переносы, которых не должно быть
в вашем файле. Сохраните и закройте файл. Теперь для регистрации сервера и вложенного
в него класса СОМ-объекта надо дважды щелкнуть по имени файла MyCom.reg в окне
Windows File Manager или Windows Explorer и согласиться с реакцией системы типа
«Вы действительно хотите...» После этого соберите проект, дав команду Build
> Build. Процесс сборки должен пройти без ошибок. Теперь наш простейший DLL
СОМ-сервер зарегистрирован и готов к использованию.