![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вызов DLL, написанной в C++ [D6, Win95/98, WinXP]
Tack83 © (2004-06-08 18:01:00)В MS Visual C++ 6.0 была создана DLL, которая содержит обычный класс, без всяких наследований и т.п. В классе есть некоторые функции, которые мне нужно вызвать. Они не будут работать, пока объект класса не создан.
Вопрос: Как вызвать методы этого класса из программы на Delphi6?
Это возможно вообще?
Как будет выглядеть интерфейс класса на Pascal-e?
Игорь Шевченко (2004-06-09 00:21:00) [1]YuRock © (09.06.04 00:08)
А этот метод в Borland'овском FAQ'е есть
Tack83 (2004-06-09 00:08:00) [2]Надо было сходу COM использовать, и все. :-)
И голову не морочить.
YuRock (2004-06-09 00:08:00) [3]> Игорь Шевченко © (09.06.04 00:03) [12]
Кстати да, скорее всего даже так должно работать. Попробовать бы - жаль VC не стоит и ставить лень...
Tack83 (2004-06-09 00:06:00) [4]Гаврила, это я сам напишу на С++ динамическую библиотеку, которая будет содержать функции для создания объекта класса и для вызова функций-членов через объект класса, указатель на который будет храниться в этой моей DLL.
Аналог API.
Когда делаешь распределенный проект на разных языках программирования, это одна головная боль! Еще и без спецификации нормальной.
YuRock (2004-06-09 00:04:00) [5]> Sergey Masloff
> Ага. Только структуры разные.
В смысле разные? Что, память разная? Или в VC++ байт состоит не из 8-и бит? Не понятно...
> Гаврила © (08.06.04 23:29) [11]
> Не, ну вы хотите совместимости форматов классов двух разных языков программирования ? Двух разнвх компиляторов от разных фирм ?
Какая разница, какие фирмы, какие компиляторы? Бинарный код всегда в одном формате!
Игорь Шевченко (2004-06-09 00:03:00) [6]
> Вопрос: Как вызвать методы этого класса из программы на
> Delphi6?
>
> Это возможно вообще?
Возможно, если класс создается внутри DLL, возвращается указатель на экземпляр этого класса и нужные методы являются виртуальными. Тогда пишется аналогичный класс на Delphi только с виртуальными методами, расположенными в той же последовательности.
Гаврила (2004-06-08 23:29:00) [7]Не, ну вы хотите совместимости форматов классов двух разных языков программирования ? Двух разнвх компиляторов от разных фирм ?
Это нереально
Tack83 (08.06.04 22:57) [9]
Зачем еще одна DLL ? Это твоя библиотека ? Емли да, то два варианта
1. Аналог API. Все методы класса превращаются просто в экспортируемые библиотекой процедуры с передачей Handle параметром. В качестве Handle скорее всего просто указатель на экзеспляр.
2. Одна функция в библиотеке? которая создает экземпляр интерфейса, дальнейшая работа с экземпляром класса через интерфейс
Sergey Masloff (2004-06-08 23:27:00) [8]YuRock © (08.06.04 20:07) [4]
>Что разумеется? Как в C++, так и в паскале, объект класса - это >указатель на структуру с данными.
Ага. Только структуры разные.
Tack83 (2004-06-08 22:57:00) [9]Я так понял, лучше всего написать пару-тройку функций-оберток на С++, включив их в еще один ДЛЛ, а уже этот ДЛЛ использовать в программе на Delphi.
Спасибо, коллеги.
default (2004-06-08 22:55:00) [10]"вы говорите про логику, а не про формат"
вернее сказать общие детали реализации
jack128 (2004-06-08 22:52:00) [11]
> В паскале и си разная работа со стеком - параметры передаются
> по разному, то начиная с первого, то с последнего к первому.
> Где-то в факе написано было.
это то как рз не проблема. Декларацию методов в дельфи можно пометить как сdecl..
default (2004-06-08 22:42:00) [12]YuRock © (08.06.04 20:07) [4]
вы говорите про логику, а не про формат
обёртка это типа
procedure CreateObject;
begin
Obj := TObject.Create
end;
Tack83 (08.06.04 18:01)
в [1] всё сказано
Подкрадуха (2004-06-08 22:38:00) [13]В паскале и си разная работа со стеком - параметры передаются по разному, то начиная с первого, то с последнего к первому. Где-то в факе написано было.
YuRock (2004-06-08 20:07:00) [14]> Romkin © (08.06.04 18:29) [3]
> Разумеется :))
Что разумеется? Как в C++, так и в паскале, объект класса - это указатель на структуру с данными. Методы - это обычныефункции, первым параметром в которые идет этот указатель на структуру.
Чуть сложнее - с виртуальными методами. А так - все одно и тоже.
Кстати, а что значит " через обертку"?
Romkin (2004-06-08 18:29:00) [15]Разумеется :))
Именно формат. Кстати, в D6 работа с Qt идет именно через обертку
Weber (2004-06-08 18:28:00) [16]
> Clickmaker © (08.06.04 18:22) [1]
В чём же разница? Те же принципы, неужели формат класса в паскале так отличается от сишного?
Clickmaker (2004-06-08 18:22:00) [17]Невозможно. Разве что переделать класс в COM-объект или написать набор функций-оберток в длл, одна из которых будет создавать экземпляр, а другие вызывать его методы