![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Реализация движка в 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) работает нормально. Ла и Где здесь взяться ошибке?