1. Спонсор публикаций Marketplace codeby. Сервис, который так долго ждали. При расчетах используем биткоин. Первый товар уже в продаже: Консультация на тему ИБ от Ondrik8

    Скрыть объявление
  2. Спонсор публикаций Marketplace codeby. Сервис, который так долго ждали. При расчетах используем биткоин. Второй товар маркетплейса: Надёжная обфускация вашей программы от PingVinich

    Скрыть объявление

Приведение типов объектов в Dll

Тема в разделе "Delphi - Система", создана пользователем 790, 31 май 2006.

Статус темы:
Закрыта.
  1. 790

    790 Гость

    Репутация:
    0
    Всем ку!
    Появилась неожиданная проблема.
    Есть куча классов, наследуемых от TBaseClass
    например:
    TRaspred = class(TBaseClass)
    В приложении создаются экземпляры этих классов, заполняются данными, все дела.
    Потом передаются ф-ии из Dll:
    fnDAMain(ptrPS:PPS),
    где PPS = ^TPS (TPS тож наследуется от TBaseClass)
    в DLL в fnDAMain есть такой код:

    iIkCnt: integer;
    ptrPS: PPS;
    ptrRU: PBASECLASS; //PBASECLASS = ^TBaseClass
    ...
    ptrRU := ptrPS^.GetListObject(i);

    {возвращает PBASECLASS. Но по факту указывает на объект класса TRaspred,
    и потом}


    iIkCnt := (ptrRU^ as TRaspred).GetListCount(2);

    На этой строке появляется имсключение EInvalidCast с матом: Invalid type cast.
    Хотя! Если эту fnDAMain(ptrPS:PPS) вызывать не через DLL, а просто скомпилить в приложение, то все пучком.
    Смотрел адреса, куда указатели показывают. В приложении и DLL они совпадают.
    DLL подключал и явно и неявно. По-барабану. Та же ошибка.
    Что это может быть и как это исправить или обойти?
     
  2. Shurik Ilyin

    Shurik Ilyin Гость

    Репутация:
    0
    Попробуй:
    1. iIkCnt := TRaspred(ptrRU^).GetListCount(2);
    2. Посмотреть в dll состояние директивы {$M+}, она же {$TYPEINFO ON}
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей