Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.20;
Скачать: CL | DM;

Вниз

Вызов DLL, написанной в C++   Найти похожие ветки 

 
Tack83   (2004-06-08 18:01) [0]

В MS Visual C++ 6.0 была создана DLL, которая содержит обычный класс, без всяких наследований и т.п. В классе есть некоторые функции, которые мне нужно вызвать. Они не будут работать, пока объект класса не создан.

Вопрос: Как вызвать методы этого класса из программы на Delphi6?

Это возможно вообще?
Как будет выглядеть интерфейс класса на Pascal-e?


 
Clickmaker ©   (2004-06-08 18:22) [1]

Невозможно. Разве что переделать класс в COM-объект или написать набор функций-оберток в длл, одна из которых будет создавать экземпляр, а другие вызывать его методы


 
Weber ©   (2004-06-08 18:28) [2]


> Clickmaker ©   (08.06.04 18:22) [1]

В чём же разница? Те же принципы, неужели формат класса в паскале так отличается от сишного?


 
Romkin ©   (2004-06-08 18:29) [3]

Разумеется :))
Именно формат. Кстати, в D6 работа с Qt идет именно через обертку


 
YuRock ©   (2004-06-08 20:07) [4]

> Romkin ©   (08.06.04 18:29) [3]
> Разумеется :))

Что разумеется? Как в C++, так и в паскале, объект класса - это указатель на структуру с данными. Методы - это обычные функции, первым параметром в которые идет этот  указатель на структуру.

Чуть сложнее - с виртуальными методами. А так - все одно и тоже.
Кстати, а что значит "через обертку"?


 
Подкрадуха ©   (2004-06-08 22:38) [5]

В паскале и си разная работа со стеком - параметры передаются по разному, то начиная с первого, то с последнего к первому. Где-то в факе написано было.


 
default ©   (2004-06-08 22:42) [6]

YuRock ©   (08.06.04 20:07) [4]
вы говорите про логику, а не про формат
обёртка это типа
procedure CreateObject;
begin
 Obj := TObject.Create
end;
Tack83   (08.06.04 18:01)  
в [1] всё сказано


 
jack128 ©   (2004-06-08 22:52) [7]


> В паскале и си разная работа со стеком - параметры передаются
> по разному, то начиная с первого, то с последнего к первому.
> Где-то в факе написано было.
это то как рз не проблема. Декларацию методов в дельфи можно пометить как сdecl..


 
default ©   (2004-06-08 22:55) [8]

"вы говорите про логику, а не про формат"
вернее сказать общие детали реализации


 
Tack83   (2004-06-08 22:57) [9]

Я так понял, лучше всего написать пару-тройку функций-оберток на С++, включив их в еще один ДЛЛ, а уже этот ДЛЛ использовать в программе на Delphi.
Спасибо, коллеги.


 
Sergey Masloff   (2004-06-08 23:27) [10]

YuRock ©   (08.06.04 20:07) [4]
>Что разумеется? Как в C++, так и в паскале, объект класса - это >указатель на структуру с данными.
Ага. Только структуры разные.


 
Гаврила ©   (2004-06-08 23:29) [11]

Не, ну вы хотите совместимости форматов классов двух разных языков программирования ? Двух разнвх компиляторов от разных фирм ?
Это нереально

Tack83   (08.06.04 22:57) [9]

Зачем еще одна DLL ? Это твоя библиотека ? Емли да, то два варианта
1. Аналог API. Все методы класса превращаются просто в экспортируемые библиотекой процедуры с передачей Handle параметром. В качестве Handle скорее всего просто указатель на экзеспляр.
2. Одна функция в библиотеке? которая создает экземпляр интерфейса, дальнейшая работа с экземпляром класса через интерфейс


 
Игорь Шевченко ©   (2004-06-09 00:03) [12]


> Вопрос: Как вызвать методы этого класса из программы на
> Delphi6?
>
> Это возможно вообще?


Возможно, если класс создается внутри DLL, возвращается указатель на экземпляр этого класса и нужные методы являются виртуальными. Тогда пишется аналогичный класс на Delphi только с виртуальными методами, расположенными в той же последовательности.


 
YuRock ©   (2004-06-09 00:04) [13]

> Sergey Masloff
> Ага. Только структуры разные.

В смысле разные? Что, память разная? Или в VC++ байт состоит не из 8-и бит? Не понятно...

> Гаврила ©   (08.06.04 23:29) [11]
> Не, ну вы хотите совместимости форматов классов двух разных языков программирования ? Двух разнвх компиляторов от разных фирм ?

Какая разница, какие фирмы, какие компиляторы? Бинарный код всегда в одном формате!


 
Tack83   (2004-06-09 00:06) [14]

Гаврила, это я сам напишу на С++ динамическую библиотеку, которая будет содержать функции для создания объекта класса и для вызова функций-членов через объект класса, указатель на который будет храниться в этой моей DLL.
Аналог API.

Когда делаешь распределенный проект на разных языках программирования, это одна головная боль! Еще и без спецификации нормальной.


 
YuRock ©   (2004-06-09 00:08) [15]

> Игорь Шевченко ©   (09.06.04 00:03) [12]

Кстати да, скорее всего даже так должно работать. Попробовать бы - жаль VC не стоит и ставить лень...


 
Tack83   (2004-06-09 00:08) [16]

Надо было сходу COM использовать, и все. :-)
И голову не морочить.


 
Игорь Шевченко ©   (2004-06-09 00:21) [17]

YuRock ©   (09.06.04 00:08)

А этот метод в Borland"овском FAQ"е есть



Страницы: 1 вся ветка

Текущий архив: 2004.06.20;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.05 c
14-1086063660
YurikGL
2004-06-01 08:21
2004.06.20
WindowsUpdate


1-1086527773
Евгений2
2004-06-06 17:16
2004.06.20
не могу составить простейшее условие


6-1083480866
lucky4me
2004-05-02 10:54
2004.06.20
Закачка HTTP


3-1085749710
Andrey
2004-05-28 17:08
2004.06.20
Использование cdx в Delphi


14-1086349024
DSKalugin
2004-06-04 15:37
2004.06.20
Уязвимость Firebird