Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2011, 18:36   #1
CrHD
 
Регистрация: 19.05.2009
Сообщений: 8
Печаль GLScene и ДЛЛ

Приветствую
Дело такое... Этот же код прекрасно работает в чистом, тестовом проекте.
Проверяю его в основном, и если в длл есть добавление узла (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;
Уже весь мозг сломал себе >_<'
CrHD вне форума Ответить с цитированием
Старый 24.05.2011, 12:56   #2
CrHD
 
Регистрация: 19.05.2009
Сообщений: 8
По умолчанию

Решение - галки 'Build with runtime packages' в приложении и длл
Уж не помню, когда и зачем их отключил >_<
CrHD вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
GLscene bulldog5293 Компоненты Delphi 1 14.01.2011 02:02
GLScene Andrew101095 Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 18.08.2010 17:51
GLScene Maxs Компоненты Delphi 0 17.06.2009 19:49
GLScene?? Foll Gamedev - cоздание игр: Unity, OpenGL, DirectX 3 09.12.2007 17:00
GLScene LepihinMS Gamedev - cоздание игр: Unity, OpenGL, DirectX 40 09.08.2007 14:13