Регистрация dll средствами VB на Windows 8

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
shahmatist
Новичок
Новичок
 
Сообщения: 27
Зарегистрирован: 09.03.2006 (Чт) 0:01
Откуда: Волгоград

Регистрация dll средствами VB на Windows 8

Сообщение shahmatist » 25.02.2014 (Вт) 12:27

Пробовал так:

Код: Выделить всё
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Function registerDll(dllname As String) As Boolean
Dim hLib As Long
Dim hProc As Long

hLib = LoadLibrary(dllname)
If hLib = 0 Then
    registerDll = False
    Exit Function
End If
hProc = GetProcAddress(hLib, "DllRegisterServer")
If hProc = 0 Then
    FreeLibrary hLib
    registerDll = False
    Exit Function
End If

CallWindowProc hProc, 0, 0, 0, 0

FreeLibrary hLib

registerDll = True
End Function


на xp и вин7 работает. (На вин7 правда нужно запустить от имени админа). На вин8 не работает, даже если запустить от админа. Подскажите в каком направлении рыть?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Регистрация dll средствами VB на Windows 8

Сообщение Хакер » 26.02.2014 (Ср) 3:05

shahmatist писал(а):на xp и вин7 работает. (На вин7 правда нужно запустить от имени админа).

1) А под XP не нужно? Тоже нужно.

shahmatist писал(а):Подскажите в каком направлении рыть?

2) regsvr32 остался под Win8? Можно его поотлаживать и посмотреть, как он это делает, если делает успешно.

3) Вышеприведённый код ужасен и непонятно, вообще каким чудом работает.
Функция DllRegisterServer не принимает ни одного аргументы.
Функция CallWindowProc может быть использована только в отношении функций, ожидающих и принимающих 4 аргумента.
В противном случае происходит нарушение стека, потому что регистр ESP отматывается больше или меньше, чем надо (в данном случае — больше).

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

4) Так или иначе, фраза «не работает» содержит ровно 0 процентов информации. Нужно писать, что именно происходит? Креш процесса? Не происходит регистрации? Какая функция возвращает код сбоя? Каков Err.LastDllError ?

5) В некоторых случаев может быть приемлемым просто запускать regsvr32.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

shahmatist
Новичок
Новичок
 
Сообщения: 27
Зарегистрирован: 09.03.2006 (Чт) 0:01
Откуда: Волгоград

Re: Регистрация dll средствами VB на Windows 8

Сообщение shahmatist » 26.02.2014 (Ср) 8:19

4) Так или иначе, фраза «не работает» содержит ровно 0 процентов информации. Нужно писать, что именно происходит? Креш процесса? Не происходит регистрации? Какая функция возвращает код сбоя? Каков Err.LastDllError ?


Ошибок не выдает, регистрация не происходит.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Регистрация dll средствами VB на Windows 8

Сообщение Хакер » 26.02.2014 (Ср) 8:21

shahmatist писал(а): Не происходит регистрации? Какая функция возвращает код сбоя? Каков Err.LastDllError ?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Регистрация dll средствами VB на Windows 8

Сообщение Mikle » 26.02.2014 (Ср) 8:56

В код не смотрел, но на всякий случай напишу - сталкивался с ситуацией, что regsvr32 MyDll.dll в Win8 не работает, хотя папка, содержащая MyDll.dll, является текущей. Если прописать полный путь - работает.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Google-бот и гости: 40

    TopList