Технологии
Вопрос о возможностях DLL - вопрос №587025
Меня интересует такая вещь. Можно ли в ДЛЛ кодах задавать клаcсы и пользовательские типы. Будут ли они обработаны при обращении к ДЛЛ из программы написанной на другом языке и как это следует оформлять.------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Дополнение автора от март 23, 2013 г., 10:01:27
Просто пока в примерах ДЛЛ я видел только функции получающие какие то значения и возвращающие другие. Причём получаемые и возвращаемые значения должны быт в формате понимаем языком в котором написана программа обращающаяся к ДЛЛ. То есть создать ДЛЛ функцию для обработке объектов образованных от классов заданных на несовместимом зыке языке по моему невозможно.----------------------------------------------------------------------------------------------------------------------------------------------------------------
Дополнение автора от март 23, 2013 г., 10:02:05
Дело в том что я Хотел бы использовать возмести ООП в в программе с внутренним языком не поддерживающим создание пользовательских классов и типов. Мне это очень нужно для реализации игры стратегии на конструкторе Game Maker. Я ищу возможность наиболее красиво доится абстрактности. Определить объектам действия в которых они будут работать с абстрактными понятиями которые мне хотелось бы выразит какими либо структурами.
Дополнение автора от март 24, 2013 г., 08:00:21
Мне нужно примерно следующие: В ДЛЛ описан клас. В Длл есть функция создающая объект этого клас и возвращающая ссылку на него (например адрес памяти). Есть процидуры получающие в качестве аргумента эту ссылку и приминяющие метады класа (исключително к полям объекта ). есть функцыи получающие туже ссылку и возвращающие значение определённого поля объекта.
Не обезателно должны быть классы, подходят структуры и пользователские типы, и есле ечть ещё что нибудь в этом роде.
Дополнение автора от март 24, 2013 г., 08:13:50
Да ДЛЛ.НЕТ ГМ 8 какраз стал поддерживать. Я как раз собираюсь Яву изучать когда будет время. Но если нетрудно расскажите как оформить в такой библиотеке то что я описал выше. хотелось бы относительно человеческим языком, а ещё лучше привести простенький пример с комментариями. Это проста просьба. Если кому то не трудно.
Иван Базылев март 23, 2013 г.
-
Всего ответов: 3
-
и классы и типы являются абстракциями уровня языка
если речь о языках компилирующихся в двоичные dll — ни каких сведений о типах, а тем более классах, двоичная dll не хранит
на пример в С/С++, даже в рамках одного языка, для подключения скомпилированного кода в любом формате — dll, lib, obj, требует файлы заголовков — h/hpp. они предоставляют компилятору сведения именно о типах и классах
при этом вопрос совместимости с другими языками весьма не тривиальный — как правило это требует от программиста очень хорошего знания особенностей обоих языков и полностью самостоятельного проектирования интерфейсов вызова
однако для некоторых сред исполнения, таких как .NET, dll содержит все необходимые метаданные (сведения о типах и классах), более того — они совместимы для все х языков в пределах .NET
-
можно и без .net если пользоваться технологией COM например (и ее производных). Там все строится на интерфейсах (в терминах C++ — это чисто абстрактный базовый класс)
-
о технологии COM (OLE) — следует учитывать ряд особенностей
1 — COM надо регистрировать в системе. их написание и отладка требуют определенной квалификации и возможны далеко не на всех языках
2 — в большинстве языков, без импорта описаний интерфейса, работа с COM далеко не тривиальна или даже невозможна. для тех же С/С++, потребуется создать с помощью implib библиотеку-обертку и заголовочные файлы к ней (h/hpp)
«из коробки» с COM работает только VB, строго говоря эта технология изначально под него и разрабатывалась
или в крайнем случае это должен быть язык с аналогичными возможностями среды исполнения — поддержка динамического маршалинга данных COM/OLE. а это опять же .NET — VB.NET и C# не ниже 4й версии языка (то есть .NET 4 и выше)*
3 — в общем случае использование COM/OLE отрицательно сказывается на производительности. точнее говоря это снова вопрос квалификации и опыта, но требования достаточно строгие
ps * — в случае создания нового проекта на .NET, COM и OLE не нужны по определению. в .NET несоизмеримо проще разработка и богаче возможности, а производительность более чем достаточна для подавляющего большинства типов задач
Похожие вопросы
Ошибка с MSVCP110.dll. Переустанавливал уже Visual C++ все года, не помогает
август 1, 2022 г.
Пытаюсь сделать обратиться к C библиотеке из C# проекта. Библиотека подключена, но она использует свои структуры данных для работы, которые нельзя
январь 31, 2020 г.
Не могу решить проблему с некоторыми файлами .dll - не получается их зарегистрировать после помещения в нужную папку.
июнь 27, 2015 г.
vip
indiana_janes_gameexplorerhelper.dll Помогите скачать этот файл. Из-за него игра не устанавливается.
январь 29, 2015 г.