Форум: "Потрепаться";
Текущий архив: 2005.07.31;
Скачать: [xml.tar.bz2];
ВнизМучался всю ночь: проблема с dll Найти похожие ветки
← →
NewWonder © (2005-07-11 15:10) [0]Уважаемые мастера! Помогите решить такую проблему. Есть dll:
library Dream3D;
uses
OpenGL, Windows;
{$R Dream3D.res}
procedure DrawGreed(l: integer); 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 "Dream3D.DLL";
implementation
end.
Всё прекрасно работает в VCL-приложении, а вот при работе с API-приложением вылетает или EAccessViolation или прога совсем вылетает. В чём дело? Я ума не приложу откуда такое =(
Пишу в uses Dream3D,
Вызываю в соответствующем месте процедуру, вроде всё делаю правильно...
Простая процедура, вызываемая таким же образом из dll вида:procedure Test(i: integer); stdcall;
begin
i:=i+1;
end;
Работает нормально. Почему глюки только в API-приложении и с чем оно связано?
Помогите плиз!
← →
Ega23 © (2005-07-11 15:13) [1]А что эта процедура делает???
← →
NewWonder © (2005-07-11 15:15) [2]Процедура рисует 3D-сетку, используя OpenGL.
Можно в кладовке посмотреть программу с этой процедурой в разделе для студентов. Там всё работает, но код этот не в dll и там VCL-приложение.
← →
BiN © (2005-07-11 15:18) [3]а что в OpenGL.pas в секции инициализации?
И вообще-то, отладчик как раз и существует для выявления неадекватного поведения программы.
← →
NewWonder © (2005-07-11 15:21) [4]Та же dll нормально работает в VCL-приложении.
← →
Ega23 © (2005-07-11 15:27) [5]Та же dll нормально работает в VCL-приложении.
Подцепи её не в VCL-приложении (host application)
← →
NewWonder © (2005-07-11 15:43) [6]Это в настройках проекта нужно делать?
← →
Ega23 © (2005-07-11 15:45) [7]Это в настройках проекта нужно делать?
Run -> Parametrs -> Host application
← →
NewWonder © (2005-07-11 15:51) [8]Спасибо, попробую!
← →
NewWonder © (2005-07-11 16:03) [9]
> Run -> Parametrs -> Host application
Сработало! А по-другому можно как-то сделать? Например, если не известно, какая программа будет использовать dll?
← →
Ega23 © (2005-07-11 16:05) [10]Сработало! А по-другому можно как-то сделать? Например, если не известно, какая программа будет использовать dll?
Боюсь, что нет.
Да и зачем? Это же только на этапе отладки нужно...
← →
NewWonder © (2005-07-11 16:24) [11]Спасибо!
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2005.07.31;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.033 c