Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> GLScene и dll, вываливаемся в EInvalidCast 
:(
    Опции темы
CrHD
Дата 22.5.2011, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 1.4.2010

Репутация: нет
Всего: нет



Приветствую
Дело такое... Этот же код прекрасно работает в чистом, тестовом проекте.
Проверяю его в основном, и если в длл есть добавление узла (Pipe.AddNode(x,y,z))-  то выскакиваем в EInvalidCast  'Invalid class typecast' и показывает в GLMisc на функцию
Код
function TGLNodes.Add: TGLNode;
begin
    Result:=(inherited Add) as TGLNode;
end;




В длл так (не стал вставлять сюда описание процедур, которые не относятся к делу, сейчас пытаюсь выполнить только Build2):
Код

library ToRS;

uses
  ShareMem,  SysUtils,  Classes,  GLScene,  GLObjects, GLMisc, GLWin32Viewer, GLExtrusion, StdCtrls,  GLGeomObjects,  PluginInterface;

type
  TTubeCurve=class (TInterfacedObject, ITubeCurve)
  private
    Pipe:TGLPipe;
    Pipe1:TGLPipe;
    Pipe2:TGLPipe;
    Disk1:TGLDisk;
    Disk2:TGLDisk;
    HeadX, HeadY, HeadZ, PrevAngle,AngleCurve,AngleRotate,VectorX,VectorY,VectorZ,Diameter,Thickness,Length,TX,TY,TZ:Real;
    Side:byte;
    x,y,z:integer;

      procedure Build2(NewPipe:TGLPipe; nx,ny,nz:integer);

  public
     destructor Destroy; override;
  end;

  const
    name='Отвод круглого сечения';

//{$R *.res}

function CreateTubeCurve:iTubeCurve;
begin
  result:=TTubeCurve.Create;
end;

procedure TTubeCurve.Build2(NewPipe: TGLPipe; nx, ny, nz:integer);
begin
  x:=nx;
  y:=ny;
  z:=nz;
  Pipe:=NewPipe;
  Pipe.Radius:=1;
  Pipe.parts:=[ppOutside,ppInside];
  Pipe.Slices:=32;
  Pipe.SplineMode:=lsmLines;
  Pipe.AddNode(x,y,z);
  Pipe.AddNode(0,0,0);
end;

exports
  CreateTubeCurve;


Интерфейс
Код
type
  ITubeCurve=interface
     procedure Build2(NewPipe:TGLPipe; nx,ny,nz:integer);
   end;


В .exe соответственно:
Код

   TC:ITubeCurve;

...

procedure TForm1.Button4Click(Sender: TObject);
var
  CreateTubeCurve:TCreateTubeCurve;
  h:THandle;
  x:integer;
  Pipe:TGLPipe;

begin

   h:=LoadLibrary(PChar('TORS.dll'));
   CreateTubeCurve:=getprocaddress(h,'CreateTubeCurve');
   TC:=CreateTubeCurve;
   Pipe:=TGLPipe.CreateAsChild(Form1.GLScene1.Objects);
   TC.Build2(Pipe,1,5,1);
end;


Уже весь мозг сломал себе >_<'
PM MAIL ICQ   Вверх
MetalFan
Дата 23.5.2011, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



uses ShareMem в dll и приложение.
TObject в dll <> TObject в приложении.


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
CrHD
Дата 24.5.2011, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 1.4.2010

Репутация: нет
Всего: нет



Цитата(MetalFan @ 23.5.2011,  17:59)
uses ShareMem в dll и приложение.
TObject в dll <> TObject в приложении.

ShareMem включен везде.
Ок, делаю вот так, создаю пайп в приложении, в длл работаю с ним через указатель
http://pastebin.com/qpNim2n7

Все равно при копипасте кода в новый проект пайп строится, в старом все рушится в EInvalidCast  'Invalid class typecast' при Pipe.AddNode(x,y,z)...
Глупость какая-то... Можно, конечно, перенести все в новый проект, но должна же быть причина такого поведения...
PM MAIL ICQ   Вверх
MetalFan
Дата 24.5.2011, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Цитата(CrHD @  24.5.2011,  11:08 Найти цитируемый пост)
ShareMem включен везде.

в т.ч. идет первым модулем в проектном файле (dpr) приложения?


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
CrHD
Дата 24.5.2011, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 1.4.2010

Репутация: нет
Всего: нет



Цитата(MetalFan @ 24.5.2011,  11:35)
Цитата(CrHD @  24.5.2011,  11:08 Найти цитируемый пост)
ShareMem включен везде.

в т.ч. идет первым модулем в проектном файле (dpr) приложения?

Да 

Все решила галка 'Build with runtime packages'. Видимо забыл что когда-то ее отключил, уже было полез либы GLScene ковырять >_< 
А обнаружилось это при сравнении project options моей проги и нового проекта...

А вообще такое манипулирование объектом приложения из длл (ссылка постом выше) правильно\безопасно?


UPD уже стало понятно какой я лол, тем уможно закрывать

Это сообщение отредактировал(а) CrHD - 24.5.2011, 13:16
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0443 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.