Вопрос о возможностях DLL - вопрос №587025

Меня интересует такая вещь. Можно ли в ДЛЛ кодах задавать клаcсы и пользовательские типы. Будут ли они обработаны при обращении к ДЛЛ из программы написанной на другом языке и как это следует оформлять.------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Дополнение автора от 23.03.13 11:01:27
Просто пока в примерах ДЛЛ я видел только функции получающие какие то значения и возвращающие другие. Причём получаемые и возвращаемые значения должны быт в формате понимаем языком в котором написана программа обращающаяся к ДЛЛ. То есть создать ДЛЛ функцию для обработке объектов образованных от классов заданных на несовместимом зыке языке по моему невозможно.---------------------------------------------------------------------------------------------------------------------------------------------------------------- 

Дополнение автора от 23.03.13 11:02:05
Дело в том что я Хотел бы использовать возмести ООП в в программе с внутренним языком не поддерживающим создание пользовательских классов и типов. Мне это очень нужно для реализации игры стратегии на конструкторе Game Maker. Я ищу возможность наиболее красиво доится абстрактности. Определить объектам действия в которых они будут работать с абстрактными понятиями которые мне хотелось бы выразит какими либо структурами.

Дополнение автора от 24.03.13 09:00:21

Мне нужно примерно следующие: В ДЛЛ описан клас. В Длл есть функция создающая объект этого клас и возвращающая ссылку на него (например адрес памяти). Есть процидуры получающие в качестве аргумента эту ссылку и  приминяющие метады класа (исключително к полям объекта ). есть функцыи получающие туже ссылку и возвращающие значение определённого поля объекта.

Не обезателно должны быть классы, подходят структуры и пользователские типы, и есле ечть ещё что нибудь в этом роде.



Дополнение автора от 24.03.13 09:13:50

Да ДЛЛ.НЕТ  ГМ 8 какраз стал поддерживать.  Я как раз собираюсь Яву  изучать когда будет время. Но если нетрудно расскажите как оформить в такой библиотеке то что я описал выше. хотелось бы  относительно человеческим языком, а ещё лучше привести простенький пример с комментариями. Это проста просьба. Если кому то не трудно.

 

DLL

Ответы

и классы и типы являются абстракциями уровня языка

если речь о языках компилирующихся в двоичные dll — ни каких сведений о типах, а тем более классах, двоичная dll не хранит

на пример в С/С++, даже в рамках одного языка, для подключения скомпилированного кода в любом формате — dll, lib, obj, требует файлы заголовков — h/hpp. они предоставляют компилятору сведения именно о типах и классах

при этом вопрос совместимости с другими языками весьма не тривиальный — как правило это требует от программиста очень хорошего знания особенностей обоих языков и полностью самостоятельного проектирования интерфейсов вызова

однако для некоторых сред исполнения, таких как .NET, dll содержит все необходимые метаданные (сведения о типах и классах), более того — они совместимы для все х языков в пределах .NET

23.03.13

можно и без .net если пользоваться технологией COM например (и ее производных). Там все строится на интерфейсах (в терминах C++ — это чисто абстрактный базовый класс)

23.03.13

о технологии 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 несоизмеримо проще разработка и богаче возможности, а производительность более чем достаточна для подавляющего большинства типов задач

23.03.13
Посмотреть всех экспертов из раздела Технологии > C/C++
Пользуйтесь нашим приложением Доступно на Google Play Загрузите в App Store