Irokez
1

Работа с DLL (подключение в runtime)

20.07.2009, 14:16. Показов 1927. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
подскажите как сделать несколько dll и динамически их подключать
тоесть программа должна определить наличие своей надстройки и показать
пункт в меню. когдато видел пример, но не могу найти
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.07.2009, 14:16
Ответы с готовыми решениями:

Подключение и работа с DLL в Python
Добрый день! Необходимо подключить к Python библиотеки, поставляемую производителем...

Подключение dll библиотеки и работа с ней
вот взял dll-ку вот отсюда dll-ка приведите плз пример как работать с этой dll-кой... Спасибо...

Подключение к проекту и работа с Dll, написанной на C++
привет. надо вызвать функцию с c++ dll в программу с#. в с++ функции обязательно надо использовать...

Подключение System.Runtime.Remoting.Channels.Tcp и ошибка "В Runtime нет Tcp"
При попытке подключения using System.Runtime.Remoting.Channels.Tcp; Вылетает ошибка, что в...

15
0 / 0 / 0
Регистрация: 20.07.2009
Сообщений: 6
20.07.2009, 21:17 2
Посмотри в MSDN там есть пример создания надстройки для VB.
Создаётся VisData.
0
Irokez
21.07.2009, 10:51 3
Cпасибо за ответ, но мне нужно было немного не то
я нашел все-таки сттьи про это на www.mycomp.com.ua
в статьях 'Мышление в стиле Visual Basic' но он мне не очень
понравился. Если у кого-то есть другие идеи сообщите.
CatsTail
22.07.2009, 01:42 4
VB позволяет создавать ActiveX-DLL (хранилище COM-объектов). Нужно выбрать соответствующий тип проекта. Пользоваться ими достаточно просто (позднее связывание - CreateObject; раннее связывание Set OOO= New Object)
Irokez
22.07.2009, 10:32 5
это все правильно, но как в проге определить
в какой дллке какие объекты (названия) если
дллки будут создаваться после написания самой проги
Comanche
22.07.2009, 16:10 6
Применяя позднее связывание.
Irokez
22.07.2009, 16:18 7
простите может я туплю но
set a=CreateObject('Что сюда писать')
перспектива вводить название объекта руцями не радует
если я все правильно понял, то название объекта
далеко не совпадает с именем файла dll.
Comanche
22.07.2009, 16:47 8
Твоей DLL-ке соответствует какой-то класс в реестре. Если эта DLL-ка создана тобою в VB6, т.е. является ActiveX DLL, то в качестве имени класса при регистрации в реестре будет использовано поле 'Имя проекта' (меню Проект - пункт Параметры... - вкладка General), состыкованное через точку с именем класса. Если такую DLL-ку подключать к какому-то проекту 'ранним связыванием', то в списке 'Проект - Ссылки' она будет видна под именем, взятым из поля 'Описание проекта' (меню Проект - пункт Параметры... - вкладка General).

Например, создал ты такую DLL-ку:
Имя проекта: MyLib
Описание проекта: Библиотека Ирокеза
Класс с реализацией методов и свойств: MainClass

Тогда в реестре она поселится в разделе 'HKCRMyLib.MainClass'. Если её подключать 'по-раннему', то в списке она объявится как 'Библиотека Ирокеза'.

А если подключать её 'по-позднему', то надо написАть в коде так:
Visual Basic
1
Set a = CreateObject('MyLib.MainClass')
В MSDN-е же написано:

Syntax

CreateObject(class,[servername])

ГДЕ:

class - Required;
Variant (String). The application name and class of the object to create.

Как написано - так и делаем )
Irokez
22.07.2009, 19:38 9
я очень благодарен за разжовывание но или я не понял ответ
или вы не поняли вопрос. Прошу прощения если я ввел вас в заблуждение но моя проблема в том что при написании программы не известно ни имя проекта, ни имя класса. тоесть длл я буду писать может через год и назову проект и клас как мне взбредет.
Можно просмотреть реестр и вытянуть все оотуда, но как я узнаю что
HKLM/MyProjCherezGod.Clas1 относится к моей проге?
Чувствую что ответ на поверхности, но ...
Comanche
22.07.2009, 21:12 10
А-а-аа... понял. Вы просто закладываете в свою прогу 'расширяемость' на будущее - за счёт возможности подключения к ней настроек, так?

Если 'Да', то продолжу:

Согласен, Имя Проекта и Имя Класса могут быть любыми - тут глупо было бы загонять их в какие-то рамки. Но оно и не надо - всё есть в реестре. Имя DLL-ки ведь знать вы будете, так? Например, просканируете каталог AddIns в папке своего приложения, составляя список найденных в ней DLL-ек. Тогда отталкиваемся от имени:

Ищем в реестре, в разделе HKCRCLSID подразделы XXXInprocServer32, у которых значение ключа 'По умолчанию' = вашей DLL-ке с полным путём. Делаем это перебором куска 'XXX'. Например, находится подраздел '{EF8BF5AC-6D2A-11D7-8E9D-00E018426915}InprocServer32', у которого значение ключа 'По умолчанию' = 'D:AddInsMyLibFile.DLL'. Так вот, уровнем выше, у ветки '{EF8BF5AC-6D2A-11D7-8E9D-00E018426915}' значением будет не что иное, как имя класса, которое нужно вставить в CreateObject() - например, 'MyLib.MainClass' или что-то ещё.

И всех делов!
Comanche
22.07.2009, 21:14 11
Кстати, тут переписываются два индейца...
)
Irokez
23.07.2009, 10:41 12
Ура! Наконец то мы пришли к общему знаменателю.
Это именно то что мне нужно. Огромадное спасибо!
Наверное по этому поводу стоит накропать маленькую
статейку с примером )) Пусть другие так не мучаются.
Слава прериям и бизонам! Хау!
Comanche
23.07.2009, 12:22 13
Согласен, краснокожий.
Но у меня ещё вопрос: а как твоя прога будет знать, какие методы/свойства/функции есть у экземпляра класса, созданного с помощью CreateObject()? Ты им будешь давать всё-таки типизированные имена и форматы вызова? Т.е. опять получаются какие-то 'рамки' (ограничения)?
Irokez
23.07.2009, 13:12 14
тут я вижу два решения
или использовать callbyname (но еще не пробовал),
а названия функций и методов брать из одной типизированной функции
в виде строки, но с этим появится много проблем, или,
действительно, стандартизировать для себя несколько
интерфейсных методов и функций, наколоть на плече их имена
и юзать. А если серъезно, то в таких ситуациях как моя
нужно всего 2, 3 функции для обработки данных, пару для настройки
плагина, About и может еще пару служебных. Так что это уже не проблема.
Comanche
23.07.2009, 14:29 15
Понял. Вроде не должно быть проблем.
Напишешь пример - выложи его на RELIB и на VBNET. Я буду первым, кто его скачает )
0 / 0 / 0
Регистрация: 20.07.2009
Сообщений: 6
23.07.2009, 14:39 16
Я буду вторым, с вашего позволения.
0
23.07.2009, 14:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.07.2009, 14:39
Помогаю со студенческими работами здесь

runtime error dll
dll : library Project2; uses ShareMem, SysUtils, Dialogs, Classes;

Проблемы с System.Runtime.Remoting.dll
В начале проекта пишу: using System; using System.Runtime.Remoting; using...

Api-ms-win-crt-runtime-|1-1-0.dll
Какую программу мне нужно переустановить, чтобы решить Эту проблему: "Запуск программы невозможен,...

Отсутствует api-ms-win-crt-runtime-l1-1-0.dll
Добрый день. Пытаюсь установить MySQL Workbench. Информация на странице загрузки говорит,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru