Форум программистов, компьютерный форум, киберфорум
QBasic
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.98/43: Рейтинг темы: голосов - 43, средняя оценка - 4.98
1102 / 237 / 21
Регистрация: 20.05.2016
Сообщений: 1,068
Записей в блоге: 21
1

Подключить библиотеку dll

01.03.2017, 09:35. Показов 8020. Ответов 166
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Данным диалектом Бейсика не пользуясь, но иногда здесь бываю. Решил немного поучаствовать. Собственно вопрос в следующем: можно ли пользоватся сторонними библиотеками в этом диалекте, насколько сложен процесс использования? Цель - есть своя xll для VBA, можно убрать обертку будет dll, выложу здесь для тех кто много считает, большими числами) (Гугл не спрашивал ибо важно понять, есть целесообразность в данном продукте?)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.03.2017, 09:35
Ответы с готовыми решениями:

Не получается подключить библиотеку Unmanaged.dll (Firefox nss3.dll)
Здравствуйте, начал изучать c#, очень понравилась тема декриптования, для начала решил из...

Подключить библиотеку dll
Имеется программа nircmd.exe, которая с помощью батника позволяет выполнять различные комманды К...

Как подключить dll библиотеку?
Здраствуйте, есть такой вопрос, как можно подключить *.dll библиотеку к код блокс или к ...

Как подключить .dll библиотеку?
Есть готовый код на С++...

166
4392 / 2242 / 252
Регистрация: 28.10.2011
Сообщений: 8,571
Записей в блоге: 6
05.05.2018, 16:36 161
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от The trick Посмотреть сообщение
все довольно просто.
Но не настолько как в VB и его разновидностях.
Нужно знать интерфейс COM объекта, его идентификаторы CLSID и IID и загружать через CoCreateInstance.
Проще загрузить процедурную DLL чем COM, потому что нужен только список функций. Кроме того это кроссплатформенно.
0
Модератор
9723 / 3684 / 871
Регистрация: 22.02.2013
Сообщений: 5,529
Записей в блоге: 78
05.05.2018, 16:49 162
Цитата Сообщение от locm Посмотреть сообщение
Но не настолько как в VB и его разновидностях.
Очень-очень сложно . Я так понимаю Interface как раз и создан для декларирования интерфейсов.

Цитата Сообщение от locm Посмотреть сообщение
Нужно знать интерфейс COM объекта, его идентификаторы CLSID и IID и загружать через CoCreateInstance.
Это же так сложно...
Во-первых, CLSID можно не знать, а создавать объект по ProgID;
Во-вторых, Pro_grammer скинул тулзу которая автоматом декларирует все константы и интерфейсы;
В-третьих, вместо CoCreateInstance тебе все-рано нужно вызывать пару LoadLibrary/GetProcAddress (по одному на каждую функцию).

Цитата Сообщение от locm Посмотреть сообщение
Проще загрузить процедурную DLL чем COM, потому что нужен только список функций.
Кому проще? Да тут даже список функций не нужен.

Цитата Сообщение от locm Посмотреть сообщение
Кроме того это кроссплатформенно.
Не смешно уже.
0
4392 / 2242 / 252
Регистрация: 28.10.2011
Сообщений: 8,571
Записей в блоге: 6
05.05.2018, 18:38 163
Цитата Сообщение от The trick Посмотреть сообщение
вместо CoCreateInstance тебе все-рано нужно вызывать пару LoadLibrary/GetProcAddress (по одному на каждую функцию).
Не обязательно. DLL можно подключить статически и используемые функции будут в импорте программы.

Цитата Сообщение от The trick Посмотреть сообщение
Да тут даже список функций не нужен.
Я писал о PB. Покажите как загрузить COM не зная интерфейса (это аналог списка функций процедурной DLL)?

Цитата Сообщение от The trick Посмотреть сообщение
Я не об этом, о DLLках.
В винде у динамических библиотек расширение DLL. В Linux расширение SO. В MacOS расширение DYLIB.
ActiveX DLL это чисто виндовый формат.
В Linux и MacOS библиотеки процедурные.
Если вы решите сделать ActiveX DLL для Linux и MacOS то придется создавать процедурную библиотеку и программно реализовывать что все связанно с ActiveX.
Загрузку такой библиотеки, также придется производить программно. WinAPI функций подобных CoCreateInstance нет.
Стоит ли это потраченных усилий? Кто захочет писать столько лишнего кода?

Поэтому я написал что не кроссплатформенно, т. к. ActiveX применяется в винде и поддерживается в основном в ЯП и майкрософта.
0
Модератор
9723 / 3684 / 871
Регистрация: 22.02.2013
Сообщений: 5,529
Записей в блоге: 78
05.05.2018, 18:48 164
Цитата Сообщение от locm Посмотреть сообщение
Не обязательно. DLL можно подключить статически и используемые функции будут в импорте программы.
Ну их же все равно придется описывать. Во-вторых, без DLL приложение в этом случае вообще не запустится.

Цитата Сообщение от locm Посмотреть сообщение
Покажите как загрузить COM не зная интерфейса (это аналог списка функций процедурной DLL)?
Что? Список функций и есть интерфейс. Или что ты имеешь в виду?

Цитата Сообщение от locm Посмотреть сообщение
Я не об этом, о DLLках.
В винде у динамических библиотек расширение DLL. В Linux расширение SO. В MacOS расширение DYLIB.
ActiveX DLL это чисто виндовый формат.
В Linux и MacOS библиотеки процедурные.
Если вы решите сделать ActiveX DLL для Linux и MacOS то придется создавать процедурную библиотеку и программно реализовывать что все связанно с ActiveX.
Загрузку такой библиотеки, также придется производить программно. WinAPI функций подобных CoCreateInstance нет.
Стоит ли это потраченных усилий? Кто захочет писать столько лишнего кода?
Еще раз, в COM библиотеке что я сделал, какие функции Windows используются? Думаю это сразу даст ответ на все вопросы. Загрузку нужно будет производить по тому же принципу как и любую другую библиотеку.

Цитата Сообщение от locm Посмотреть сообщение
Поэтому я написал что не кроссплатформенно, т. к. ActiveX применяется в винде и поддерживается в основном в ЯП и майкрософта.
А в PB ключевое слово Interface для чего? Почему оно бинарно-совместимо с COM?
0
4392 / 2242 / 252
Регистрация: 28.10.2011
Сообщений: 8,571
Записей в блоге: 6
05.05.2018, 19:07 165
Цитата Сообщение от The trick Посмотреть сообщение
Список функций и есть интерфейс. Или что ты имеешь в виду?
Я написал что список фукнций процедурной DLL это аналог методов COM интерфейса. Если сравнивать процедурную и ActiveX DLL.

Цитата Сообщение от The trick Посмотреть сообщение
в COM библиотеке что я сделал, какие функции Windows используются?
Вы ее сами написали, а не компилятор сгенерировал часть кода (как в случае разработки скажем на VB6). Именно об этом я писал.
Цитата Сообщение от locm Посмотреть сообщение
Если вы решите сделать ActiveX DLL для Linux и MacOS то придется создавать процедурную библиотеку и программно реализовывать что все связанно с ActiveX.
Загрузку такой библиотеки, также придется производить программно.
Другими словами. В Linux и MacOS такой вид DLL обычно не используют и нет стандарта как в случае ActiveX в винде. Результат не стоит затраченных усилий.
0
Модератор
9723 / 3684 / 871
Регистрация: 22.02.2013
Сообщений: 5,529
Записей в блоге: 78
05.05.2018, 19:23 166
Цитата Сообщение от locm Посмотреть сообщение
Я написал что список фукнций процедурной DLL это аналог методов COM интерфейса. Если сравнивать процедурную и ActiveX DLL.
Цитата Сообщение от locm Посмотреть сообщение
Покажите как загрузить COM не зная интерфейса
Не понимаю тогда что ты имеешь в виду под "загрузить COM не зная интерфейса".

Цитата Сообщение от locm Посмотреть сообщение
Вы ее сами написали, а не компилятор сгенерировал часть кода (как в случае разработки скажем на VB6). Именно об этом я писал.
Ну а что кто-то заставляет на VB6 писать? Вон у bedvit'а она на C++ вообще написана. В VC++ вообще написал #import и все классы и интерфейсы автоматически декларируются.

Цитата Сообщение от locm Посмотреть сообщение
В Linux и MacOS такой вид DLL обычно не используют и нет стандарта как в случае ActiveX в винде. Результат не стоит затраченных усилий.
Стандарта в чем? COM объект это просто указатель на виртуальную таблицу методов. Все! Насколько мне известно в C++ (по крайней мере от MS) указатель на виртуальную таблицу функций используется в обычных C++ классах для виртуальных методов. А C++ классы тоже не используют? Расскажи в чем концептуальная разница между COM объектом и C++ объектом с виртуальными методами? Просто в COM это стандартизировано на бинарном уровне и предоставляется базовый набор для автоматического слежения за жизнью объекта и запроса нужного интерфейса. Результат стоит, т.к. мы имеем поддержку ЯП в которых работа с COM тривиальна, а в некоторых вообще невозможна работа с DLL импортом.
1
1102 / 237 / 21
Регистрация: 20.05.2016
Сообщений: 1,068
Записей в блоге: 21
05.05.2018, 23:09  [ТС] 167
По моим скромным знаниям.
СОМ-интерфейс представляет собой просто указатель на указатель виртуальной таблицы (virtual table, или Vtable) C++

Добавлено через 17 минут
Используя абстрактный класс и виртуальные методы. Для С++ есть библиотеки MFC и ATL, с которыми проще писать рутинные вещи.

Добавлено через 5 минут
...такие как набор свойств и методов класса, ведь по сути каждый метод мы прописываем три раза в проекте.
Первый в интерфейсе, второй в хедере, третий в реализации (в самом .cpp)

Добавлено через 8 минут
Материалы, которые мне понравились по теме COM:
Первый источник (в конце статьи есть примеры - С++, VB)
Второй источник

Добавлено через 7 минут
В этой теме пока не настолько хорошо прокачан, как The trick, что есть мотивация для меня, но катастрофически не хватает времени, что есть, в каком-то роде, демативация.
1
05.05.2018, 23:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.05.2018, 23:09
Помогаю со студенческими работами здесь

Не могу подключить dll библиотеку
Вообщем есть библиотека Visa32.dll и я не могу ее подключить. Так же есть два заголовочных файла -...

Как подключить библиотеку 7z.dll?
Как подключить библиотеку 7z.dll. Я скачал архив с сурсами, откопал 7z.dll пытаюьс добавить в...

Как подключить библиотеку i7000.dll?
у меня есть библиотека i7000.dll библиотека необходимая для работы с com портами все остальное...

Как подключить библиотеку shell32.dll ?
Решил воспользоваться примером открытия файла с помощью необходимого приложения. В примере...


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

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