Технологии

Вопрос о возможностях 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

  • Андрей FaceOff - аватарка

    Андрей FaceOff

    1-й в Технологиях

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

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

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

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

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

    март 23, 2013 г.
  • Сергей - аватарка

    Сергей

    9-й в Технологиях

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

    март 23, 2013 г.
  • Андрей FaceOff - аватарка

    Андрей FaceOff

    1-й в Технологиях

    о технологии 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, 2013 г.

Похожие вопросы

ошибка api-ms-win-crt-heap-l1-1-0.dll

июль 10, 2017 г.

Технологии