7
790
Всем ку!
Появилась неожиданная проблема.
Есть куча классов, наследуемых от TBaseClass
например:
TRaspred = class(TBaseClass)
В приложении создаются экземпляры этих классов, заполняются данными, все дела.
Потом передаются ф-ии из Dll:
fnDAMain(ptrPS
PS),
где 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
PS) вызывать не через DLL, а просто скомпилить в приложение, то все пучком.
Смотрел адреса, куда указатели показывают. В приложении и DLL они совпадают.
DLL подключал и явно и неявно. По-барабану. Та же ошибка.
Что это может быть и как это исправить или обойти?
Появилась неожиданная проблема.
Есть куча классов, наследуемых от TBaseClass
например:
TRaspred = class(TBaseClass)
В приложении создаются экземпляры этих классов, заполняются данными, все дела.
Потом передаются ф-ии из Dll:
fnDAMain(ptrPS
где 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
Смотрел адреса, куда указатели показывают. В приложении и DLL они совпадают.
DLL подключал и явно и неявно. По-барабану. Та же ошибка.
Что это может быть и как это исправить или обойти?