forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Delphi (http://forum.boolean.name/forumdisplay.php?f=66)
-   -   Xors3D для Delphi 7 (http://forum.boolean.name/showthread.php?t=9226)

maxturbo 23.09.2009 07:43

Xors3D для Delphi 7
 
Вот решил написать враппер движка Xors3D для Delphi 7, вроди немного написал, но когда я пытаюсь запустить его то вылезает ошибка вот ниже код:
Код:

program Sample;
uses
  SysUtils,
  xors3dsdk in 'Xors3DSDK.pas';

var cam, cube:integer;
begin
  xGraphics3D(800,600,32,1,0);
  cam:=xCreateCamera();
  cube:=xCreateCube();

  xMoveEntity(cam,0,0,-5);

  xCreateLight();
  xAmbientLight(0,0,0);

 while xKeyHit(1)=0 do
  begin
    xTurnEntity(cube,1,1,1);
    xRenderWorld;
    xFlip;
  end;
end.

Указывает на xFlip и вот что пишет
"Sample.exe faulted with message: "access violation at 0x00407e26: write of address 0x00130000" Process Stopped. Use Step or Run to continue"
Помогите решить эту проблему :)

giraf 23.09.2009 17:47

Ответ: Xors3D для Delphi 7
 
функцию вызываешь из dll каким методом cdecl или stdcall?
Попробуй так:
procedure xFlip();cdecl; external 'xors3d' name '_xFlip@0";
и еще имена функций в dll чувствительны к регистру.

maxturbo 23.09.2009 18:01

Ответ: Xors3D для Delphi 7
 
Неа не помогло :( ... Может надо еще подобие функций писать что находятся в Xors3D.bb ?
К примеру как эта:
Код:

Function xGraphics3D(width, height, depth = 16, mode = 0, vsync = 0)
        hwnd = SystemProperty("AppHWND")
        xSetWND(hwnd)
        DLL_xGraphics3D(width, height, depth, mode, vsync)
End Function

Только я вот не знаю как ее написать :(

maxturbo 23.09.2009 18:05

Ответ: Xors3D для Delphi 7
 
Собственно вот как я пишу:
Ниже файл Xors3DSDK.pas
Код:

unit Xors3DSDK;
interface
procedure xGraphics3D(w:Integer;h:Integer;d:Integer=0;mode:Integer=0;v:Integer=0);cdecl; external 'Xors3D' name '_xGraphics3D@20';
implementation
end.

и вот так каждую команду!!! И как понять имена функций в dll чуствительны к регистру? может их как нибудь прежди временно регестрировать в Windows? Вобщем помогите кто чем может...

maxturbo 23.09.2009 18:18

Ответ: Xors3D для Delphi 7
 
Все всем спасибо проблемка решена :) Может в дальнейшем будут еще вопросы!!!Просто надо было вызывать функцию методом stdcall а не cdecl :) В особенности спасибо giraf за мысль :)

giraf 23.09.2009 23:23

Ответ: Xors3D для Delphi 7
 
Бывает когда метод stdcall работает, а бывает и cdecl, все зависит от длл

firstvirus 31.03.2010 22:48

Ответ: Xors3D для Delphi 7
 
Не стану мусорить созданием новой темы, поэтому напишу тут. Использую unit файл от товарища maxturbo, для написания программы в Delphi. Тестовый код:
Код:

  xCreateLog (0,1,'xors_log.html');
  xAppTitle('Test');
  xGraphics3D (800,600,32,0,1);
  xSetBuffer(xBackBuffer());
  xInitDraw();
  vr_SetColorScheme(1);
  testImage:=xLoadImage('test.png');
  repeat
    xCls();
    xDrawImage(testImage,0,0,0);
    xFlip();
  until xKeyHit(KEY_ESCAPE)<>0;

Однако при попытке запуска приложения возникает ошибка. Путем дебага выяснил что переменная testImage пуста, т.е. функция не вернула значение. Так же функция xCreateLog не создает файл лога и соответственно не могу посмотреть в чем дело. Замена stdcall на cdecl не помогла.


Чет нифига не понимаю. Заработало когда опять поменял stdcall на cdecl. Хотя 5 минут назад нифига не происходила. Жаль что вопрос не по теме, но теперь такая же проблема с FastImage. :(

Knightmare 31.03.2010 23:02

Ответ: Xors3D для Delphi 7
 
Насколько я помню, делфи юзает свой велосипед для строк. А двиг юзает стандартные const char *, т.е. тупо массив символов.

Randomize 31.03.2010 23:09

Ответ: Xors3D для Delphi 7
 
xCreateLog (0,1,PChar('xors_log.html'));
xAppTitle(PChar('Test'));
xLoadImage(PChar('test.png'));
Попробуй.

.Squid 31.03.2010 23:40

Ответ: Xors3D для Delphi 7
 
А откуда взялась идея в первый аргумент xCreateLog засовывать ноль?
Там допустимые значения от 1 до 7.

Randomize 01.04.2010 00:08

Ответ: Xors3D для Delphi 7
 
И к чему приводит этот ноль?

.Squid 01.04.2010 02:12

Ответ: Xors3D для Delphi 7
 
Ни к чему. Лог не создается, все свободны, всем спасибо.

firstvirus 01.04.2010 11:09

Ответ: Xors3D для Delphi 7
 
Большое спасибо. Немного посидев и подумав переделал файл заголовков. Нужно было передавать данные в библиотеку не ShortString, a PAnsiChar.

Randomize 01.04.2010 11:57

Ответ: Xors3D для Delphi 7
 
Дак в Windows повсеместно PChar и PAnsiChar.
Это пишут в любом учебнике Delphi.


Часовой пояс GMT +4, время: 13:48.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot