![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Random |
|
|||
|
Unregistered |
Need help.
Есть DLL, написанная на Delphi, мне нужно использовать ее в своей прграмме, написаннной на С++. Собственно в чем вопрос - в библиотеке есть функция со следующим прототипом:
Как должен выглядеть прототип этой функции на с++? Заранее спасибо за ответы по теме. |
|||
|
||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
В любом случае, эту функцию можно будет использовать только в C++ Builder, т.к. VCL классы есть только в нем.
Delphi не создает .lib-файла для библиотек, так что его нужно будет сгенерировать с помощью IMPLIB: implib mylibrary.lib mylibrary.dll После этого mylibrary.lib добавить в проект Билдера и объявить функцию так:
Вроде так. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
| Random |
|
|||
|
Unregistered |
Спасибо конечно, но хотелось бы использовать библиотеку в Visual C++.
lib-файлы мне кстати не нужны, линковка динамическая. |
|||
|
||||
| Void |
|
||||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
Невозможно. Ну не там VCL-ных классов TBitmap и TMemoryStream. Перепишите функцию на чистом C++ или WinAPI или MFC, Qt - на чем угодно, только не VCL.
lib-файл нужен и при динамическом связывании. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
||||
|
|||||
| Random |
|
||||
|
Unregistered |
Ладно, подробнее что я хотел:
Как я использую DLL: Пусть А и B - некоторые типы
Как я понимаю и как показывают эксперименты функции GetProcAdress по большому счету пофиг к какому типу функции кастят ее результат. При вызове функции через указатель на стек записываются те аргументы, которые я передал в функцию. Внутри DLL они считываются со стека и из них пытаются построить аргументы нужные функции из библиотеки.Затем обратно на стек записывается результат работы функции в виде DLL, которые уже в моей программе будут приведены к возвращаемому типу. Вопрос был в том, можно ли, используя знания о методох построения объектов для типов аргумента и возвращаемого значения, использовать для прототипа функции в моей программе какие-либо общедоступные для с++ типы. Т.е., условно говоря будет ли работать например вот такой вариант:
Сможет ли DLL построить TBitmap из HBITMAP и как вытянуть данные по указателю на то, что раньше было TMemoryStream? Вообще возможно ли такое сделать или требуются очень глубинные знания о внутренней структуре VCL классов? |
||||
|
|||||
| Void |
|
||||||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
Ну, примерно так оно и работает. Только указатели и целочисленные типы (кроме 64-разрядных) возвращаются через eax, числа с плавающей точкой - на вершине FP-стека, если ничего не попутал.
По-моему, фактически придется портировать часть VCL на VC++. Вот здесь есть библиотека, позволяющая использовать VCL из VC++, но она, сколько я понял, платная. Что функция-то делает? Может, легче все-таки ее переписать? -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
||||||
|
|||||||
| Ignat |
|
|||
![]() Флудератор ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4030 Регистрация: 19.4.2004 Где: غيليندزيك مدينة Репутация: 3 Всего: 73 |
Как вариант - написать в Билдере свою библиотеку, с использованием VCL и прилинковать её к проекту в VC++.
Кстати, если не принципиально использование именно мелкософтовского компиллера, то проект на VC++ можно перенести в билдер, он поддерживает MFC. -------------------- Теперь при чем :P |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |