Форум: "Основная";
Текущий архив: 2004.06.20;
Скачать: [xml.tar.bz2];
ВнизВызов 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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.048 c