Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вызов 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-объект или написать набор функций-оберток в длл, одна из которых будет создавать экземпляр, а другие вызывать его методы


Наверх

Титульная страница Поиск, карта сайта Написать письмо