| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Проблема использования интерфейса Delphi в CBulder |
| Автор: SergSW 26.8.2009, 18:16 | ||||||||
Суть такова есть класс TIMyInter реализующий мой интерфейс IMyInter. Реализация класса и код создающий экземпляр класса вынесен в DLL.
п.с. IItem так же мой интерфейс реализуемый в этой библиотеке. На Delphi пример работает на ура вызов проходит без ошибок, но тоже самое на CBilder-e валится в AV, причём проблема именно в том что я возвращаю IItem, т.к. прочие методы рабоают и в билдере интерфейс на Сях
под отладчиком увидел интересный момент (Пример Delphi)
вызов того же метода (Пример CBuilder)
Как видно в случае с CBuilder-ом иной список параметров помещаемых в стек. При этом везде должна идти передача параметров по stdcall как добиться единообразия? |
| Автор: SergSW 26.8.2009, 20:14 |
В чём на Ваш взгляд они разные? Насколько я помню все методы интерфейсов являются виртуальными. Т.к. все точки входов методов должны размещаться в VTM это интерфейс - у него нет реализации на C |
| Автор: CodeMonkey 26.8.2009, 21:06 | ||||
Я ничего не понимать в сях, но
Неявно трактуется как:
Может это поможет. |
| Автор: SergSW 27.8.2009, 04:36 | ||
| CodeMonkey, не знал )), спасибо за совет - попробую эх теперь бы ещё перевезти
на C |
| Автор: CodeMonkey 27.8.2009, 08:30 |
| А откуда взялся вариант интерфейса для C++? |
| Автор: SergSW 27.8.2009, 08:35 | ||
простите не понял вопроса |
| Автор: Alexeis 27.8.2009, 09:17 |
Был ли он сгенерирован средой или же написан самостоятельно руками. |
| Автор: SergSW 27.8.2009, 09:25 | ||
был написан самостоятельно - руками |
| Автор: Alexeis 27.8.2009, 10:00 | ||
Вот так будет правильно
Добавлено через 1 минуту и 49 секунд Просто добавляешь модуль делфи в проект билдера, и билдер сам генерит совместимые хидеры. |
| Автор: SergSW 27.8.2009, 10:07 |
| но будет ли он корректно работать на VS? Сомневаюсь |
| Автор: Romikgy 27.8.2009, 10:16 | ||||||
иль так
иль так
имхо |
| Автор: Alexeis 27.8.2009, 11:50 |
Нет конечно, нужно просто разбираться что VS понимает под словом interface. |
| Автор: SergSW 27.8.2009, 12:32 | ||||
Romikgy, увы но не так. Видимо несовсем внимательно читали мой код. То что выпредлогаете первым в стек засунет Result, затем Y, X, Type и this(Self) а в делфи получается порядок другой Y, X, Type, this(Self), Result несмотря на то что везде стоит вызов stdcall.
да вроде бы это везде абстрактные классы) Проблема возникает в передачи параметров при возврате интерфейсного объекта. Для себя решил что проще явно переделать методы
по крайней мере должно везде заработать, жаль что много переписывать придётся |
| Автор: Alexeis 27.8.2009, 12:56 |
А кто гарантирует что структура VMT у них совпадает? Добавлено через 32 секунды По идее делфи дает COM совместимые интерфейсы. |
| Автор: SergSW 27.8.2009, 13:01 |
пробовал создавать интерфейсные классы на VS и использовал их в Delphi и ошибок не было)) так что похоже структуры совпадают Вроде склассы VS спокойно используют в Delphi [http://www.citforum.ru/programming/delphi/vcpp_classes_in_delphi/]. Логично предположить обратное, что Delphi классы должны нормально работать в VS. Если конечно правильно описать интрерфейсы |
| Автор: CodeMonkey 27.8.2009, 13:58 | ||
Что-то у меня жуткие подозрения насчёт работоспособности такого "недокласса" - как у него, скажем, с ClassName или InstanceSize? А как насчёт классов с множественным наследованием? P.S. Вообще-то есть же такая штука как TLB или кто там он есть - типа, кросс-языковое описание интерфейса. Я вообще-то без понятия, но нельзя ли как-нить его создать для интерфейса? Например, File/New/Type library. Потом вбиваете свой интерфейс, а результат импортируете в другой среде. Добавлено через 2 минуты и 39 секунд P.S. Например, у меня получилось вот так:
Насколько я понимаю - это универсальное определение, которое должен жувать любой язык, который поддерживает интерфейсы. Добавлено через 8 минут и 15 секунд P.P.S. А вообще-то C++ Builder понимает Delphi-вые файлы ;) Просто создайте пустой модуль с определением интерфейса и подключите его к проекту Builder-а. Всё, интерфейс можно использовать. |
| Автор: Alexeis 27.8.2009, 15:06 |
Наверное все же речь об интерфейсах, а не классах. Просто в Delphi класс и интерфейс это не тоже самое. |
| Автор: CodeMonkey 30.8.2009, 13:09 |
| Вот http://blogs.msdn.com/oldnewthing/archive/2004/10/05/238050.aspx что-то сказано по поводу написания интерфейсов в C++. |