Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-1085646663
Ale
2004-05-27 12:31
2004.06.20
TADOConnection


1-1086616295
kwd
2004-06-07 17:51
2004.06.20
Random в DLL


14-1086246365
AlexG
2004-06-03 11:06
2004.06.20
Как заставить программу работать на другом компьютере?


1-1086451515
Pavel
2004-06-05 20:05
2004.06.20
Rxlib


3-1085501968
aimsyslv
2004-05-25 20:19
2004.06.20
Не удаляется запись





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский