Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Реализация движка в dll [Delphi]


NewWonder ©   (2005-08-01 15:32:00) 

Вопрос к тем, кто писал движки в виде dll (DRON, помоги плиз!).
К примеру код dll такой:

library ...

uses
 OpenGL, Windows;

procedure DrawGreed(l: integer); export; stdcall;
var
 i, j: integer;
begin
 for i:=0 to l do
   for j:=0 to l do
   begin
     glBegin(gl_lines);
       glvertex3f(i/5, j/5, 0);
       glvertex3f((i+1)/5, j/5, 0);
       glvertex3f(i/5, j/5, 0);
       glvertex3f(i/5, (j+1)/5, 0);
     glEnd;
   end;
 glPushMatrix;
 glRotatef(90, 1, 0,0);
 for i:=0 to l do
   for j:=0 to l do
   begin
     glBegin(gl_lines);
       glvertex3f(i/5, j/5, 0);
       glvertex3f((i+1)/5, j/5, 0);
       glvertex3f(i/5, j/5, 0);
       glvertex3f(i/5, (j+1)/5, 0);
     glEnd;
   end;
 glPopMatrix;
 glPushMatrix;
 glRotatef(-90, 0, 1,0);
 for i:=0 to l do
   for j:=0 to l do
   begin
     glBegin(gl_lines);
       glvertex3f(i/5, j/5, 0);
       glvertex3f((i+1)/5, j/5, 0);
       glvertex3f(i/5, j/5, 0);
       glvertex3f(i/5, (j+1)/5, 0);
     glEnd;
   end;
 glPopMatrix;
end;

exports DrawGreed;

begin

end.


Тогда заголовок:

unit Dream3D;

interface

uses
 OpenGL;

procedure DrawGreed(l: integer);                                 stdcall; external '....DLL';

implementation

end.


Так вот, при вызове функции в приложении, написанном на API вылетает Access Violation. Всё ли я делаю правильно?


NewWonder   (2005-08-08 21:24:00) [1]


> DR0N ©

Спасибо большое!


DR0N   (2005-08-07 19:36:00) [2]

2NewWonder на мыло ща вышлю


MeF Dei Corvi   (2005-08-05 12:33:00) [3]


> DR0N ©   (03.08.05 21:45) [13]

Решил убрать исходники из скачивания? ;)


NewWonder   (2005-08-05 09:52:00) [4]


> DR0N ©   (03.08.05 21:45) [13]

Мне хотя бы небольшой кусочек кода, чтобы посмотреть, как это делается в принципе...


NewWonder   (2005-08-05 09:49:00) [5]

линк почему-то не работает :(


DR0N   (2005-08-03 21:45:00) [6]

http://dronprogs.mirgames.ru/files/DGLE_src.rar
исходники моего движка...


NewWonder   (2005-08-02 13:32:00) [7]

Спасибо, попробую.


Ищущий   (2005-08-02 12:13:00) [8]

Попробуй динамическую загрузку библиотеки - хоть кода чуток больше, зато ошибки вылавливать легче.
Как вариант: попробуй написать небольшой интерфейс между библиотекой и приложением и уже через его методы вызывать нужную тебе процедуру.


XProger   (2005-08-02 00:13:00) [9]

NewWonder, да это наврятли поможет ;) Просто код будет корректнее.


NewWonder   (2005-08-01 23:19:00) [10]


> XProger ©   (01.08.05 23:06) [8]

Спасибо большое! Попробую переделать :)


XProger   (2005-08-01 23:06:00) [11]

Ты пишешь procedure DrawGreed(l: integer); export; stdcall;


NewWonder   (2005-08-01 22:55:00) [12]


> XProger ©   (01.08.05 21:10) [5]

В заголовке я так и пишу...


cyborg   (2005-08-01 21:41:00) [13]


> [4] NewWonder ©   (01.08.05 20:37)

Не знаю как окно, а огл по идее да.


XProger   (2005-08-01 21:10:00) [14]

procedure DrawGreed(l: integer); stdcall;


NewWonder   (2005-08-01 20:37:00) [15]

То есть инициализация окна должна быть в dll?


cyborg   (2005-08-01 20:27:00) [16]

Не знаю чего там у тебя сделано.
У тебя совершенно другой процесс в длл.
Поэтому, если ты опенгл создаёшь в программе, а пытаешься в дллке вызывать glBegin(); и прочее, то естественно будут валить ошибки.

Попробуй комментировать участки кода в длл и понемногу раскомментируй, где начнёт вылезать ошибка, в том месте и ищи.


Zer0   (2005-08-01 18:33:00) [17]

ээ, а саму ддлю ручками загружать разве не надо?


NewWonder   (2005-08-01 15:34:00) [18]

В чём может быть загвоздка? Такой же код в программе (не в DLL) работает нормально. Ла и Где здесь взяться ошибке?


Наверх

Титульная страница Поиск, карта сайта Написать письмо