1 | |
Подключить библиотеку dll01.03.2017, 09:35. Показов 8020. Ответов 166
Метки нет (Все метки)
Данным диалектом Бейсика не пользуясь, но иногда здесь бываю. Решил немного поучаствовать. Собственно вопрос в следующем: можно ли пользоватся сторонними библиотеками в этом диалекте, насколько сложен процесс использования? Цель - есть своя xll для VBA, можно убрать обертку будет dll, выложу здесь для тех кто много считает, большими числами) (Гугл не спрашивал ибо важно понять, есть целесообразность в данном продукте?)
0
|
01.03.2017, 09:35 | |
Ответы с готовыми решениями:
166
Не получается подключить библиотеку Unmanaged.dll (Firefox nss3.dll) Подключить библиотеку dll Как подключить dll библиотеку? Как подключить .dll библиотеку? |
05.05.2018, 16:36 | 161 |
Но не настолько как в VB и его разновидностях.
Нужно знать интерфейс COM объекта, его идентификаторы CLSID и IID и загружать через CoCreateInstance. Проще загрузить процедурную DLL чем COM, потому что нужен только список функций. Кроме того это кроссплатформенно.
0
|
Модератор
|
|
05.05.2018, 16:49 | 162 |
Очень-очень сложно . Я так понимаю Interface как раз и создан для декларирования интерфейсов.
Это же так сложно... Во-первых, CLSID можно не знать, а создавать объект по ProgID; Во-вторых, Pro_grammer скинул тулзу которая автоматом декларирует все константы и интерфейсы; В-третьих, вместо CoCreateInstance тебе все-рано нужно вызывать пару LoadLibrary/GetProcAddress (по одному на каждую функцию). Кому проще? Да тут даже список функций не нужен. Не смешно уже.
0
|
05.05.2018, 18:38 | 163 |
Не обязательно. DLL можно подключить статически и используемые функции будут в импорте программы.
Я писал о PB. Покажите как загрузить COM не зная интерфейса (это аналог списка функций процедурной DLL)? Я не об этом, о DLLках. В винде у динамических библиотек расширение DLL. В Linux расширение SO. В MacOS расширение DYLIB. ActiveX DLL это чисто виндовый формат. В Linux и MacOS библиотеки процедурные. Если вы решите сделать ActiveX DLL для Linux и MacOS то придется создавать процедурную библиотеку и программно реализовывать что все связанно с ActiveX. Загрузку такой библиотеки, также придется производить программно. WinAPI функций подобных CoCreateInstance нет. Стоит ли это потраченных усилий? Кто захочет писать столько лишнего кода? Поэтому я написал что не кроссплатформенно, т. к. ActiveX применяется в винде и поддерживается в основном в ЯП и майкрософта.
0
|
Модератор
|
|
05.05.2018, 18:48 | 164 |
Ну их же все равно придется описывать. Во-вторых, без DLL приложение в этом случае вообще не запустится.
Что? Список функций и есть интерфейс. Или что ты имеешь в виду? Еще раз, в COM библиотеке что я сделал, какие функции Windows используются? Думаю это сразу даст ответ на все вопросы. Загрузку нужно будет производить по тому же принципу как и любую другую библиотеку. А в PB ключевое слово Interface для чего? Почему оно бинарно-совместимо с COM?
0
|
05.05.2018, 19:07 | 165 |
Я написал что список фукнций процедурной DLL это аналог методов COM интерфейса. Если сравнивать процедурную и ActiveX DLL.
Вы ее сами написали, а не компилятор сгенерировал часть кода (как в случае разработки скажем на VB6). Именно об этом я писал. Другими словами. В Linux и MacOS такой вид DLL обычно не используют и нет стандарта как в случае ActiveX в винде. Результат не стоит затраченных усилий.
0
|
Модератор
|
|
05.05.2018, 19:23 | 166 |
Не понимаю тогда что ты имеешь в виду под "загрузить COM не зная интерфейса".
Ну а что кто-то заставляет на VB6 писать? Вон у bedvit'а она на C++ вообще написана. В VC++ вообще написал #import и все классы и интерфейсы автоматически декларируются. Стандарта в чем? COM объект это просто указатель на виртуальную таблицу методов. Все! Насколько мне известно в C++ (по крайней мере от MS) указатель на виртуальную таблицу функций используется в обычных C++ классах для виртуальных методов. А C++ классы тоже не используют? Расскажи в чем концептуальная разница между COM объектом и C++ объектом с виртуальными методами? Просто в COM это стандартизировано на бинарном уровне и предоставляется базовый набор для автоматического слежения за жизнью объекта и запроса нужного интерфейса. Результат стоит, т.к. мы имеем поддержку ЯП в которых работа с COM тривиальна, а в некоторых вообще невозможна работа с DLL импортом.
1
|
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 | |
05.05.2018, 23:09 | |
Помогаю со студенческими работами здесь
167
Не могу подключить dll библиотеку Как подключить библиотеку 7z.dll? Как подключить библиотеку i7000.dll? Как подключить библиотеку shell32.dll ? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |