Программная регистрация ActiveX DLL и OCX
Обычно регистрация (или ее отмена) ActiveX-компонентов выполняется с помощью автономной утилиты regsvr32.exe. Если необходимо выполнять процедуры регистрации в момент выполнения вашего VB-приложения, то можно воспользоваться обращением к этой утилите с помощью Shell. Однако существует еще один способ проведения таких операций, недостатком которого является необходимость «железного» включения имени нужного компонента в код программы.
Дело в том, что каждый ActiveX-компонент (ActiveX DLL или OCX) имеет функции DllRegisterServer и DllUnregisterServer, выполняющие операции регистрации/отмены регистрации над собственным компонентом. И обратиться к ним можно напрямую, как к обычной DLL-функции.
Например, если вы хотите программно проводить операции регистрации компонента COMCTL32.OCX, то в программе нужно описать две такие функции:
' функция регистрации компонента COMCTL32.OCX
Declare Function RegComCtl32 Lib "COMCTL32.OCX" Alias DllRegisterServer() As Long
' функция отмены регистрации компонента COMCTL32.OCX
Declare Function UnRegComCtl32 Lib "COMCTL32.OCX" Alias DllUnregisterServer() As Long
Однако следует иметь в виду, что если вы не указали полный путь к файлу, то его поиск будет осуществляться только в системном или текущем каталоге. Кроме того, при выполнении операций целесообразно реализовать механизм анализа возможных ошибок.
Приведем пример кода регистрации библиотеки Test.DLL, которая хранится в произвольном каталоге C:\MyApp:
Declare Function RegTestDLL Lib "Test.DLL" Alias DllRegisterServer() As Long
Const ERROR_SUCCESS = 0&
Dim retCode As Long
On Error Resume Next ' включаем программную обработку ошибок
ChDrive "C:" ' Устанавливаем нужный
ChDir "C:\MyApp" ' каталог текущим
regCode = RegTestDLL() ' регистрация Test.DLL
' анализ возможных ошибок
If Err <> 0 Then
MsgBox "Файл Test.DLL не найден"
Else
If regCode <> ERROR_SUCCES Then
MsgBox "Операция регистрации не выполнена"
End If
End If
Используемые материалы: MSDN. Совет 389.
Обсудить на форуме...
Автор: Дмитрий Сонных (aka Joss)
Добавлен: 17.01.2008