Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
ВнизИмпорт интерфейсов из C# в Delphi Найти похожие ветки
← →
Pit (2012-03-01 14:56) [0]Приветствую, камрады...
Есть маленькая трабла, опишу кратко. На C# (VS 2010) имеем такое определение:public interface ICustomCar
{
...
public interface ICar : ICustomCar
{
...
Сам проект - DLL, компилим, получаем также TLB. Этот TLB через Type Library загружает в Delphi 7. Она генерирует .pas файл, и там такой фейл:ICar = interface(IDispatch)
ну и соответственноICustomCar = interface(IDispatch)
Иерархия наследования пропала. Почему так могло произойти, куда копать? ((
← →
tesseract © (2012-03-01 15:09) [1]Не совсем понял - если у тебя диспетч, зачем тебе вообще tlb?
← →
Pit (2012-03-01 15:18) [2]Dispatch медленно. И проверка только на этапе выполнения.
В общем, я хочу чтобы Delphi по TLB генерировал то, что описывалось в шарпе.
← →
tesseract © (2012-03-01 16:03) [3]
> В общем, я хочу чтобы Delphi по TLB генерировал то, что
> описывалось в шарпе.
Используй IUnknown тогда, если шарп позволяет. Хотя насчет "медлительности" iDispatch я бы очень сильно поспорил.
← →
Pit (2012-03-01 16:09) [4]
> Используй IUnknown тогда
ты вообще о чем? Ты понял в чем корень проблемы?
Не какой базовый интерфейс использовать, а то что при экспорте интерфейса из C# в Delphi через tlb-файл теряется иерархия классов.
ICar является наследником ICustomCar. А в дельфи он оказывается наследником от IDispatch. Можно директивой сделать его наследником IUnknow, а что толку. Нужно, чтобы он был наследником от ICustomCar!
← →
tesseract © (2012-03-01 16:18) [5]
> а то что при экспорте интерфейса из C# в Delphi через tlb-
> файл теряется иерархия классов.
AFAIK Com так и работает. Это же интерфейс, а не класс.
← →
Pit (2012-03-01 17:14) [6]Как так, без наследования?
Неправда. Возьми Type Library и выдерни интерфейсы от... до хоть например вот от MS Access. Там явно видно, что куча интерфейсов наследуются от других. Так что я даже не дельфи виню.
Но и думать, что C# не умеет грамотно генерировать tlb - тоже не получается.
вот не понимаю где затык...
← →
tesseract © (2012-03-01 17:22) [7]
> Но и думать, что C# не умеет грамотно генерировать tlb -
> тоже не получается.
Посмотри tlb :-)
← →
icelex © (2012-03-01 17:43) [8]наследование для интерфейсов .net в com не поддерживается
← →
Pit (2012-03-01 18:19) [9]
> Посмотри tlb :-)
а как я его посмотрю? Там какой-то бинарный формат...
> наследование для интерфейсов .net в com не поддерживается
эээ... нифига себе новость... А по каким причинам это сделано?! Есть куча же COM-софта, который использует иерархию наследования... Тот же IE какой-нибудь.
Я не то, чтобы не верю... А есть ссылочка на какой-нибудь официоз, что именно так, не поддерживается наследование интерфейсов в .net?
← →
icelex © (2012-03-01 18:58) [10]ну, можно почитать про преобразование экспортированного типа в разделе справки, посвященном преобразованию сборки в библиотеку типов
> Есть куча же COM-софта, который использует иерархию наследования
можно почитать соседний раздел, где идет речь про преобразование типов в сборку, тогда и первое станет понятнее
← →
tesseract © (2012-03-01 19:45) [11]
> Есть куча же COM-софта, который использует иерархию наследования.
> ..
Во первых .net работает c com через весьма кривой костыль. Если самому писать tlb - то скорее всего прокатит, но авто импорт/эксопрт у меня никогда не выдавал иерархию классов.
← →
CRLF (2012-03-01 19:47) [12]
> а как я его посмотрю? Там какой-то бинарный формат...
Делфи этот бинарный формат вполне себе открывает. Это кроме того, что она его ещё и импортировать умеет.
← →
Pit (2012-03-02 13:03) [13]
> Делфи этот бинарный формат вполне себе открывает
ух ты и правда...
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.074 c