![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| rlepricon |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 25.4.2006 Репутация: нет Всего: нет |
Привет...
Есть программа состоящия из нескольких функций типа int func1(struct, struct, struct){ --//-- }; int fun2() { --//-- }; и так далее как мне скомпилить dll-ку чтобы потом её можно было вызвать на Delphi. просто не разу не сталкивался, а в документашки копаться некогда, подскажите плиз :-) Спасибо огромное :-) |
|||
|
||||
| Replicator |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 30.4.2006 Где: Outer Heaven Репутация: нет Всего: нет |
Тебя интересует каксоздать dll в принципе или какие-то особенности библиотеки, предназначенной для Delphi?
--------------------
|
|||
|
||||
| likehood |
|
||||
|
666 ![]() ![]() Профиль Группа: Участник Сообщений: 536 Регистрация: 21.12.2005 Репутация: 8 Всего: 24 |
В С++ описываешь прототипы экспортируемых функций таким образом:
В Дельфи в секции interface пишешь:
При передачи функции структуры, надо описать точно такую же структуру в Дельфи (имена могут не совпадать с С++ кодом). |
||||
|
|||||
| SuperSan |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 5.9.2008 Репутация: нет Всего: нет |
В продолжение темы, представим более сложную но и более практически интересную ситуацию.
В DLL написанной на C++ есть такие классы: __declspec(dllexport) class A { public: A(); ... }; __declspec(dllexport) class B { public: B( const A& ); void method1( const A& ); A* method2( const B* ); }; Вопросы: 1. Как сделать классы A и B доступными в программе написанной на Delphi? 2. Как создать обеъекты классов A и B в коде на Delphi? 3. Как вызывать методы классов A и B из кода на Delphi и как передавать аргументы в конструктор класса B и в B::method1() и B::method2()? Заранее огромное спасибо за ответы! Сергей Это сообщение отредактировал(а) SuperSan - 5.9.2008, 11:30 |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
1 никак 2 никак 3 никак Выход - обертки внутри dll или COM. В интерфейсе dll нужно использовать встроенные типы. Иначе подружить dll и exe можно только если они собираются одним компиллятором одинаковой версии с одинаковыми настройками |
|||
|
||||
| SuperSan |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 5.9.2008 Репутация: нет Всего: нет |
Спасибо!
Поломав полчаса голову, тоже пришел к выводу, что без обертки как минимум на стороне C++ DLL ничего не выйдет. Сразу пришла в голову аналогия - связка "C++ -> Python via SWIG" Думаю, что в случае Delphi тоже надо генерировать похожий набор функций на стороне C++, а так же соотвествующие классы в Delphi, как собственно и поступает SWIG с С++ и Python. Что есть очень непростая задача...уффф! Хоть и решаемая |
|||
|
||||
| EnergoHokum |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 600 Регистрация: 10.11.2006 Где: Россия, Ставропол ь Репутация: нет Всего: 6 |
||||
|
||||
| SuperSan |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 5.9.2008 Репутация: нет Всего: нет |
Спасибо, статья действительно интересная! А я в итоге подумываю об обертывании С++ классов в моей DLL с помощью C# и использование результата в Delphi. Вроде как использование программных компонентов через .NET в Delphi проблем не вызывает? Если так, то такое решение выглядит наиболее удобным... |
|||
|
||||
| TaNK |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 669 Регистрация: 29.10.2006 Где: Краснодар Репутация: нет Всего: 1 |
-------------------- Oracle 11.2.0.3.0 FireBird 1.0-2.5 |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
Нашел в кеше гугла, затем нашел по ключевым словам http://www.progz.ru/f89/
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| TaNK |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 669 Регистрация: 29.10.2006 Где: Краснодар Репутация: нет Всего: 1 |
-------------------- Oracle 11.2.0.3.0 FireBird 1.0-2.5 |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |