OberonCore
https://forum.oberoncore.ru/

Написать DLL, которая будет вызываться из программы на C++
https://forum.oberoncore.ru/viewtopic.php?f=35&t=4997
Страница 1 из 1

Автор:  kolesiko [ Суббота, 22 Февраль, 2014 01:13 ]
Заголовок сообщения:  Написать DLL, которая будет вызываться из программы на C++

Некая программа написана на нативном (не CLI) C++ в среде Visual Studio 2005. К ней надо сделать плагин. Возможно ли такое, и если да, то как? Какой язык для этого лучше использовать? У меня есть пример плагина на C++, но перспектива дописывать его на этом языке вгоняет меня в депрессняк. :cry:

Я точно знаю, что один из плагинов для этой программы сделан на языке Ruby (для этого сначала реализовали промежуточную DLL на C++, которая вызывается и из основной программы, и из скрипта на Ruby). Понятно, что так можно и на VBA написать, но хотелось бы нативно скомпилировать.

Платформа Windows 7+ 32-bit. Особых требований к языку нет. Меня бы и FreePascal устроил, но он криво DLL генерирует. А мне надо надежно. Не хочу потом ловить гейзенбаги и думать, куда утекает память. Может, стоит Modula-2 использовать? Я где-то слышал, что DLL лучше писать на языках без GC.

Автор:  Александр Ильин [ Суббота, 22 Февраль, 2014 07:24 ]
Заголовок сообщения:  Re: Написать DLL, которая будет вызываться из программы на C

viewtopic.php?f=30&t=1037
viewtopic.php?f=30&t=2205
viewtopic.php?f=30&t=2027

Те плагины, что попроще, сделаны без GC и даже без Runtime, а те, что посложнее, используют GC, так что примеры всего спектра возможностей есть в исходниках. См. также http://sourceforge.net/apps/mediawiki/n ... in_Central (поиск по строке "Alexander Iljin").

Целевая программа (для которой плагины) - Notepad++, написана на нативном C++ в Visual Studio.

Автор:  kolesiko [ Суббота, 22 Февраль, 2014 08:36 ]
Заголовок сообщения:  Re: Написать DLL, которая будет вызываться из программы на C

Александр Ильин писал(а):
Те плагины, что попроще, сделаны без GC и даже без Runtime, а те, что посложнее, используют GC, так что примеры всего спектра возможностей есть в исходниках. См. также http://sourceforge.net/apps/mediawiki/n ... in_Central (поиск по строке "Alexander Iljin").

Целевая программа (для которой плагины) - Notepad++, написана на нативном C++ в Visual Studio.


Спасибо! Заодно решился вопрос, какой редактор лучше использовать. :)

Я посмотрел исходник Oberon-2 Lexer (пару файлов по диагонали) и заметил слово ASSERT. Это контрактное программирование? А юнит-тесты применяете?

Автор:  Евгений Темиргалеев [ Суббота, 22 Февраль, 2014 18:13 ]
Заголовок сообщения:  Re: Написать DLL, которая будет вызываться из программы на C

См. blackbox15i21base/i21sys :
Код:
Code
Docu
Docu.Полезные сведения
Docu.Работа с DLL
Mod
Rsrc
Sym

Автор:  Александр Ильин [ Суббота, 22 Февраль, 2014 22:27 ]
Заголовок сообщения:  Re: Написать DLL, которая будет вызываться из программы на C

kolesiko писал(а):
Я посмотрел исходник Oberon-2 Lexer (пару файлов по диагонали) и заметил слово ASSERT. Это контрактное программирование? А юнит-тесты применяете?
Я плохо представляю, что такое контрактное программирование. ASSERT'ами я часто пресекаю вызов публичных функций с некорректными параметрами, либо защищаюсь от собственных ошибок, когда плохо понимаю, что пишу, либо когда нужно выразить какое-то согласование между частями программы, которое не выражается на данном языке программирования. Это чтобы при изменении и расширении чего-либо в будущем не позабыть, на каких условиях работает уже имеющееся.

В моих плагинах, по-моему, нет юнит-тестов, но вообще на при работе на Oberon-2 я автоматические тесты внедрял и использовал довольно активно.

Автор:  Info21 [ Суббота, 22 Февраль, 2014 23:05 ]
Заголовок сообщения:  Re: Написать DLL, которая будет вызываться из программы на C

Юнит-тесты это в модульной системе понятие ... ну, избыточное.

Для каждого модуля пишутся тесты, и всё.

Ведь каждый модуль представляет некую абстракцию, которая может отдельно и независимо от всего прочего тестироваться.

Контрактное программирование -- тоже некое избыточное понятие.

Неконтрактное программирование -- это не программирование, а так ... чмо.

Для каждой процедуры есть пред- и пост-условия.
На всё втыкаются АССЕРТы на уровне инстинкта.

Я детишкам в самом начале логики показываю фрагмент из "Леона":

-- Проверь. Убедись, что это именно то, что тебе нужно.
-- Я тебе доверяю.
-- Не путай одно с другим, Леон!

Автор:  kolesiko [ Воскресенье, 23 Февраль, 2014 23:56 ]
Заголовок сообщения:  Re: Написать DLL, которая будет вызываться из программы на C

Александр Ильин писал(а):
Я плохо представляю, что такое контрактное программирование. ASSERT'ами я часто пресекаю вызов публичных функций с некорректными параметрами, либо защищаюсь от собственных ошибок, когда плохо понимаю, что пишу, либо когда нужно выразить какое-то согласование между частями программы, которое не выражается на данном языке программирования. Это чтобы при изменении и расширении чего-либо в будущем не позабыть, на каких условиях работает уже имеющееся.


Это оно и есть. :)

Автор:  Роман М. [ Понедельник, 24 Февраль, 2014 15:51 ]
Заголовок сообщения:  Re: Написать DLL, которая будет вызываться из программы на C

Задачей ASSERT является проверка данных параметров во время исполнения программы, в то время как проверкой типов параметров занимается компилятор на этапе компиляции модуля КП.
Info21 писал(а):
Юнит-тесты это в модульной системе понятие ... ну, избыточное.

Для каждого модуля пишутся тесты, и всё.

Ведь каждый модуль представляет некую абстракцию, которая может отдельно и независимо от всего прочего тестироваться.

Контрактное программирование -- тоже некое избыточное понятие.

Неконтрактное программирование -- это не программирование, а так ... чмо.

Для каждой процедуры есть пред- и пост-условия.
На всё втыкаются АССЕРТы на уровне инстинкта.


Я детишкам в самом начале логики показываю фрагмент из "Леона":

-- Проверь. Убедись, что это именно то, что тебе нужно.
-- Я тебе доверяю.
-- Не путай одно с другим, Леон!

ASSERT и есть проверка соответствия контракту, при нарушении которого программа завершается нештатным образом.

Автор:  Info21 [ Понедельник, 24 Февраль, 2014 20:11 ]
Заголовок сообщения:  Re: Написать DLL, которая будет вызываться из программы на C

Роман М. писал(а):
ASSERT и есть проверка соответствия контракту, при нарушении которого программа завершается нештатным образом.
Правда?! :)

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/