646 / 522 / 72
Регистрация: 20.09.2014
Сообщений: 3,356
|
|
1 | |
Использование чужого кода30.01.2016, 03:31. Показов 1984. Ответов 10
Метки нет (Все метки)
Объясните неопытному.
Допустим я пишу программу в Qt под Windows. Хочу использовать сторонние библиотеки, написанные на Delphi. Если не ошибаюсь, библиотеки доступны через механизм ActiveX, то есть через стандартный интерфейс Windows. И тут возникают вопросы: 1. А что, если приложение не под Windows, а под Linux или Android? Те библиотеки Delphi не будут работать? 2. Какие еще способы использования чужого кода применяются? Насколько часто они применяются (насколько популярны)? 3. Какие еще имеются ограничения на использование чужого кода?
0
|
30.01.2016, 03:31 | |
Ответы с готовыми решениями:
10
Посоветуйте софт для облегчения анализа и сокращения объема чужого кода Использование чужого IP адреса Использование чужого айпи Ответственность за использование чужого движка |
Ушел с форума
|
|
30.01.2016, 07:28 | 2 |
Сборка из исходников под нужную платформу.
Разные могут быть, зависит от лицензии, под которой распостраняется этот чужой код. GPL, например, требует открытия исходников и использования только GPL-совместимых лицензий. Могут быть коммерческие лицензии, доступные за деньги, иногда довольно большие. И т.д.
1
|
646 / 522 / 72
Регистрация: 20.09.2014
Сообщений: 3,356
|
|
30.01.2016, 17:46 [ТС] | 3 |
Ну про сборку исходного кода - понятно, это по идее прямое заимствование кода.
На слуху, например, передача кода через dll-библиотеки. Это не одно и тоже, что и ActiveX? Интересуют не юридические ограничения, а технические. Могут быть кроссплатформенные ограничения или кросс-языковые. Так вот, хочу понять пределы применимости. Например, предоставляют SDK/API, написанные на Delphi. На каких платформах я могу применять данный API?
0
|
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
|
|
03.02.2016, 00:29 | 4 |
Нет. Если хочется кроссплатформенности, про ActiveX лучше забыть. Про него в любом случае лучше забыть, т.к. это давно не «стандартный интерфейс windows» и объявлен deprecated.
Под любую платформу придётся компилировать отдельно, а также не использовать в своих библиотеках платформозависимые библиотеки. Практически все (если не все) языки умеют подключать сишные библиотеки. При компилировании Делфийской библиотеки нужно будет указать, что её формат должен быть сишным, если Делфи такое умеет. Практически весь кроссплатформенный софт так и написан: общая функциональность в сишной разделяемой библиотеке, платформозависимые вещи (типа UI) — специфическим для платформы способом (Windows: WinAPI/WinFroms/WPF ; OS X: Cocoa; *nix: Qt / Gtk ; Android SDK и т.д.). Впрочем, Qt и Gtk вполне кроссплатформенны. Иногда берут Java или Tcl/Tk. В общем выбор довольно большой. На тех, под которые Делфи умеет компилировать. Ну или попробовать использовать Lazarus. Компилировать из исходников всё равно придётся, т.к. нельзя просто взять и использовать виндовую dll в линуксе, например.
1
|
646 / 522 / 72
Регистрация: 20.09.2014
Сообщений: 3,356
|
|
03.02.2016, 18:52 [ТС] | 5 |
Очень интересно! То есть практически все программисты используют некоторый стандарт под условным названием "сишная библиотека". Есть ли такой стандарт и где про него популярно можно почитать? Что в общем случае представляет собой "сишная библиотека"? Это файл dll+заголовочный файл?
0
|
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
|
|
03.02.2016, 20:34 | 6 |
Нет.
В документации к компилятору. Разделяемая библиотека — это и есть dll (Win) / so (*nix) / не-помню-какой-формат-в-OS-X / и т.д. Заголовочный файл нужен для компиляции программы, использующей библиотеку. Для запуска программы он не нужен.
1
|
646 / 522 / 72
Регистрация: 20.09.2014
Сообщений: 3,356
|
|
04.02.2016, 05:33 [ТС] | 7 |
Хорошо, по ключевому запросу "разделяемая библиотека" (или "динамически подключаемая библиотека") находит более релевантные описания в гугле, чем "сишная библиотека". Буду пытаться читать, вникать.
Требуется немного практических советов: как определить, что предоставляемый набор SDK/API можно использовать в конкретной среде разработке. Взять для примера Qt и Microsoft VS 201x Express. Операционная система Windows. При этом предоставлены библиотеки для: 1. Borland Delphi 6.0 2. Borland C 5.02 3. Borland C++ Builder 5.0 4. Microsoft Visual C++ 6.0 5. LabView 7.1
0
|
923 / 639 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
|
|
04.02.2016, 20:35 | 8 |
После чётких и ясных ответов (#2 и #4) у вас осталась каша в голове. Попробую немного разъяснить в самых общих чертах.
1 Среды разработки здесь не у дел, от слова совсем. Всё, и даже больше можно сделать и вовсе без них. 2. Различают три основных уровня кода. 1) исходный код на языке программирования. 2) машинный код под определенную архитектуру и ОС определенной версии, требующий для работы заданный набор разделяемых библиотек нужных версий (разделяемая библиотека - тот же самый машинный код в формате so ,в Венде - dll, о которых шла речь). 3) байт-код - некий промежуточный код, по задумке переносимый, в реальности далеко не всегда, предназначенный для выполнения поверх виртуальной машины (используется в технологиях Ява и дот.нет). 3. Наилучшая переносимость - интерпретируемый язык. Потом - исходники компилируемого языка. Но даже в случае наличия исходников иногда проще переписать код заново, чем исправить для работы на другой платформе. Наихудшая переносимость - машинный код. 4. Что касается разделяемых библиотек. 1) подавляющее большинство из них пишутся на Си. 2) Использовать их могут программы, написанные на разных языках, в т.ч. интерпретируемых и компилируемых в байт-код. 3) Для использования необходима совместимость ABI. (Либо скомпилированной программы, либо интерпретатора, либо виртуальной машины)
2
|
05.02.2016, 15:44 | 9 |
Стоит начать с соглашение о вызове.
1
|
646 / 522 / 72
Регистрация: 20.09.2014
Сообщений: 3,356
|
|
07.02.2016, 07:02 [ТС] | 10 |
Я почитал, по всей видимости, очень популярно соглашение о вызове cdecl, которое на низком уровне позволяет "общаться" двум программам, написанным на разных языках. Понимание о механизме взаимодействия возникло.
Ну я привык работать в среде, у которой какой-то определенный встроенный компилятор под Win32. Осталось разобраться в практической части. Как определить, сможет ли употребить MS VS 2013 Express или Qt библиотеку для Visual Studio 6.0? Имеется в виду, что они пишутся на любом языке, но затем компилируются с использованием соглашений, принятых для языка Си? Добавлено через 27 минут Забыл сообщить: в Qt у меня используется компилятор MinGW. Предоставляемая библиотека - это набор нескольких заголовочных файлов *.h, несколько *.cpp и один *.RH (это наверное какой-то ресурсный файл). Вполне вероятно, dll-ки лежат где-то в другом месте, т.к. библиотека представляет собой API.
0
|
Модератор
3051 / 2193 / 459
Регистрация: 26.03.2015
Сообщений: 8,470
|
|
07.02.2016, 13:26 | 11 |
Сможет.
Это динамическая библиотека (dll файл). Если у Вас набор файлов с исходным кодом, то скомпилируйте его (например, используя mingw). Если же Вы хотите использовать именно исходный код, то это уже другой случай.
0
|
07.02.2016, 13:26 | |
07.02.2016, 13:26 | |
Помогаю со студенческими работами здесь
11
Разбор чужого кода Разбор чужого кода Разбор чужого кода Понимание чужого кода Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |