powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как в VB6 создать собственную библиотеку dll процедур а функций?
13 сообщений из 13, страница 1 из 1
Как в VB6 создать собственную библиотеку dll процедур а функций?
    #40124465
Tavocer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Есть задача: создать на VB6 собственную библиотеку процедур а функций, которые будут использоваться в нескольких проектах. Так, чтобы не ссылаться на библиотеку через References.

Создаю проект MyDlls.dll как ActiveX.dll, размещаю там нужные функции, регистрирую MyDlls.dll в реестре.

В нужном проекте объявляю например Public Declare Function OnlyCislo Lib "C:\MyDlls.dll" (znac As String) As String

При попытке вызова функции p = OnlyCislo("d56") в нужном проекте выскакивает ошибка Can't find dll entry point OnlyCislo in C:\MyDlls.dll

Что делаю не так ?

Спасибо.
...
Рейтинг: 0 / 0
Как в VB6 создать собственную библиотеку dll процедур а функций?
    #40124509
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tavocer
чтобы не ссылаться на библиотеку через References

Tavocer
Создаю проект MyDlls.dll как ActiveX.dll


ActiveX DLL/EXE это как раз тип проекта для создания COM DLL (в реестре регистрируется библиотека типов) и в конечном итоге она появляется в списке References. Чтобы не ссылаться через References, можно использовать функцию CreateObject, которая создаёт объект через позднее связывание.

DLL-ки, которые объявляются как
Tavocer
Public Declare Function ...


штатно создать нельзя. Нештатно можно, но с некоторыми ухищрениями и шаманством. Судя по теме, у вас опыта мало и поэтому не рекомендую даже начинать в этом направлении копать.
...
Рейтинг: 0 / 0
Как в VB6 создать собственную библиотеку dll процедур а функций?
    #40124523
Tavocer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VSVLAD,

Да, через позднее связывание пробовал еще раньше,
Dim MyObject As Object
Set MyObject = CreateObject("C:\MyDlls.dll")

выдает ошибку
ActiveX component can't create object.

Set MyObject = CreateObject("Outlook.Application") например отлично работает.

"C:\MyDlls.dll" это просто пример, на самом деле MyDlls.dll находится в сетевой папке, в реестре регистрируется, при объявлении в References (раннее связывание) работает. Но надо без References
...
Рейтинг: 0 / 0
Как в VB6 создать собственную библиотеку dll процедур а функций?
    #40124526
Tavocer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tavocer,

есть контакт)
Set MyObject = CreateObject("MyDlls.NajitPaths")
...
Рейтинг: 0 / 0
Как в VB6 создать собственную библиотеку dll процедур а функций?
    #40125083
Tavocer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще вопрос.

К библиотеке MyDlls.dll обращаются программы с нескольких компьютеров в сети.

Библиотека находится в сетевой папке, и должна быть зарегистрирована regsvr32 на каждом компьютере, с котрого к ней обращаются программы, ведь так? И при позднем связывании.

Тогда при изменении библиотеки MyDlls.dll нужно ее перерегистрировать снова на каждом компе? Иначе выскакивает ошибка Automation Error.

А как добиться, чтобы не надо было перерегистрировать?
...
Рейтинг: 0 / 0
Как в VB6 создать собственную библиотеку dll процедур а функций?
    #40125093
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tavocer,

Да, надо перерегистрировать. Но никто не запрещает отлавливать ошибку и программно выполнить регистрацию компонента повторно. Лучший вариант, это сравнение версии файла из сетевой папки и её копирование в локальную и там выполнять регистрацию. Можно принудительно при запуске программы выполнять регистрацию.

Выполнять можно либо через выполнение regsvr32.exe, либо через функцию, наподобие такой:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
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 CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Any, ByVal wParam As Any, ByVal lParam As Any) As Long

'Функция регистрации файлов DLL/OCX
Public Sub RegFile(ByVal hWndOwner As Long, ByVal sFileName As String, Optional ByVal UnReg As Boolean = False)
    On Error Resume Next
    Dim lb As Long, pa As Long
    lb = LoadLibrary(sFileName)
    If UnReg Then
        pa = GetProcAddress(lb, "DllUnregisterServer")
    Else
        pa = GetProcAddress(lb, "DllRegisterServer")
    End If
    If pa > 0 Then
        Call CallWindowProc(pa, hWndOwner, ByVal 0&, ByVal 0&, ByVal 0&)
        Call FreeLibrary(lb)
    End If
End Sub
...
Рейтинг: 0 / 0
Как в VB6 создать собственную библиотеку dll процедур а функций?
    #40125254
Tavocer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VSVLAD, спасибо.

Проблема, что пользватели на компах не являются администраторами, можно ли это обойти программно?
Вот нашел https://www.cyberforum.ru/visual-basic/thread649325.html , но как то сложно...

Можно сюда вставлять ссылки на другие форумы? Если нет, поправьте.
...
Рейтинг: 0 / 0
Как в VB6 создать собственную библиотеку dll процедур а функций?
    #40125257
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tavocer,

На ScriptCodding сайте как-то обсуждалось, чтобы использовать COM компонент без регистрации, на деле использовался в скриптах VBS (WSH). Погуглите по этой теме. Но в вашем случае наверное не подойдёт. Есть статья у MS как настроить использование компонента без регистрации. Способ через правку реестра, ну... так себе. Если конечно сможете автоматизировать подготовку файла для заливки - то ок, в противном случае guid, clisd руками править дело сложное и можно ошибок наделать


https://docs.microsoft.com/en-us/archive/msdn-magazine/2005/april/simplify-app-deployment-with-clickonce-and-registration-free-com


Если задачу глубже покажете, может есть способ проще сделать. Первоначально речи о том, что прав у пользователей нет не было. Может проще будет какую-то часть на .NET перебросить
...
Рейтинг: 0 / 0
Как в VB6 создать собственную библиотеку dll процедур а функций?
    #40125266
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для автоматической регистрации COM объектов без админских прав, можно использовать специально созданный манифест. Который прописывается в .RES файле.
...
Рейтинг: 0 / 0
Как в VB6 создать собственную библиотеку dll процедур а функций?
    #40125269
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
+ ещё рекомендую прочитать по теме "Project Compatibility" и "Binary Compatibility".

При компиляции новой версии потребуется выставлять бинарную совместимость в свойствах проекта (при создании AcitveX DLL). В таком случае компилятор не будет генерировать новые идентификаторы интерфейса. В противном случае все старые ваши приложения будут падать в ошибку при запуске. Потребуется их перекомпиляция. А в случае с Reg файлом (как описано в том способе) потребуется его полная перегенерация, т.к. без выставленной совместимости каждый раз будет создаваться новые идентификаторы.

Использование позднего связывания может решить эту "проблему", но частично. Если интерфейс не будет меняться (не будет переименование методов, изменения количества и типов аргументов у метода), то должно всё заработать без проблем. Если потребуется новая версия метода, тогда придётся создавать ещё один класс, например, Имяv2/Имяv3/Имяv4 и там реализовывать новую функциональность. Чтобы ранние приложения не пришлось перекомпилировать.

Опять же всё зависит от количество таких приложений-клиентов, трудности их обновлять и т.д. Возможно VB6 в данном случае не лучший выбор будет, особенно если делать "новую разработку"
...
Рейтинг: 0 / 0
Как в VB6 создать собственную библиотеку dll процедур а функций?
    #40125282
ATM-TURBO 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Правильно посоветовали тут Reg-Free манифест. Смотрите утилиту UMMM которая почти автоматом делает подобный манифест.
А вообще стандартные DLL тоже можно делать, но в данном случае это не нужно - решается через манифест.
...
Рейтинг: 0 / 0
Как в VB6 создать собственную библиотеку dll процедур а функций?
    #40130737
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tavocer
Еще вопрос.

К библиотеке MyDlls.dll обращаются программы с нескольких компьютеров в сети.
Библиотека находится в сетевой папке,


Вам наверное web-service нужен, а не это вот всё
...
Рейтинг: 0 / 0
Как в VB6 создать собственную библиотеку dll процедур а функций?
    #40130745
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
лучше по сети никакие DLL не загружать, идея хуже не бывает, это стрельба по ногам, с неизвестным результатом, не понятно ради чего...
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как в VB6 создать собственную библиотеку dll процедур а функций?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (1): Анонимы (1)
Читали форум (1): Анонимы (1)
Пользователи онлайн (7): Анонимы (5), Bing Bot 2 мин., Yandex Bot 2 мин.
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]