Allgemeine Fragen zur PROFAN Programmierung

Views (Heute): 242904 (4340)

| Suchen
| Zurück zur Übersicht

Autor | Thema: Fast3D.dll
Marcel Pursche
| Datum:10.06.02 18:24 (mp05@metropolis.de) |
Hallo, bald werde ich die erste Testversion meiner Fast3D.dll herausbringen. Es tritt aber ein merkwürdiger Fehler auf: $O+ $H Fast3D.ph $I D3DCAPS8.inc 'Variablen Declare hF3D&,Caps#,ListBox&,Light# Declare Wand#,mtrl#,Vertex#,Index#,Texture&,Name$,Mesh&,hr& 'Für Mausbewegung Declare MouseX%,MouseY% MouseX% = %MouseX MouseY% = %MouseY hF3D& = UseDLL("Fast3D.dll") struct _F3DOBJECT = ~F3DOBJECT struct _D3DXVECTOR3 = ~D3DXVECTOR3 struct _D3DMATERIAL8 = ~D3DMATERIAL8 struct _D3DSURFACE_DESC = ~D3DSURFACE_DESC dim Wand#,_F3DOBJECT dim mtrl#,_D3DMATERIAL8 dim Vertex#,~SizeofVertex(4) dim Index#,~SizeofIndex(2) dim Light#,_D3DLIGHT8 WindowStyle 31 WindowTitle "Profan zeigt 3D (beenden mit ESC)" Window 0,0-800,600 SetTrueColor 1 CLS RGB(192,192,192) hr& = ~Fast3DInit(%hwnd, ~F3D_WINDOWED, 800, 600, ~Fast3DGetModeInfo(0,0,0,~F3D_FORMAT)) ' Vertexliste füllen ' Vertice links oben ~Fast3DVertexBuffer(Vertex#, 0, 0.0, 0.0, Single(0.0), 0.0, 0.0, Single(1.0), 0.0, 0.0) 'x, y, z, nx, ny, nz, tu, tv ' Vertice rechts oben ~Fast3DVertexBuffer(Vertex#, 1, Single(10.0), 0.0, Single(0.0), 0.0, 0.0, Single(1.0), Single(1.0), 0.0) ' Vertice links unten ~Fast3DVertexBuffer(Vertex#, 2, Single(10.0), Single(10.0), Single(0.0), 0.0, 0.0, Single(1.0), Single(1.0), Single(1.0)) ' Vertice rechts unten ~Fast3DVertexBuffer(Vertex#, 3, 0.0, Single(10.0), Single(0.0), 0.0, 0.0, Single(1.0), 0.0, Single(1.0)) 'Indexliste füllen ' erstes Dreieck ~Fast3DIndexBuffer(Index#, 0, 0, 1, 2) 'p1, p2, p3 ' zweites Dreieck ~Fast3DIndexBuffer(Index#, 1, 0, 2, 3) 'Material erstellen hr& = ~Fast3DInitMaterial(mtrl#, Single(1.0), Single(1.0), Single(1.0)) 'Object erstellen hr& = ~Fast3DCreateObject(Vertex#, 4, Index#, 6, mtrl#, Wand#) 'Texture laden Name$ = "lake.bmp" Texture& = ~Fast3DLoadTexture(Addr(Name$),D3DCOLOR_XRGB(0,0,0)) hr& = ~Fast3DSetTexture(Wand#, 0, Texture&) AddText "Texture setzen",hr& ~Fast3DAddToList(Wand#) 'Mesh laden Name$ = "teapot.x" 'LoadFile$("Mesh laden:","Mesh-Datei|*.x") Mesh& = ~Fast3DLoadMesh(Addr(Name$)) IF equ(Mesh&,~F3DERR_LOADMESH) MessageBox("Das Mesh konnte nicht geladen werden","Fehler",16) hr& = ~Fast3DDeinit() AddText "Fast3D deintialisieren",hr& dispose Vertex# dispose Index# dispose mtrl# dispose Light# ~Fast3DReleaseObject(Wand#) dispose Wand# FreeDll hF3D& End Else ~Fast3DAddMesh(Mesh&) EndIF ~Fast3DSetMeshPos(Mesh&, Single(1.0), 0.0, 0.0) 'Licht erstellen ~Fast3DInitLight(Light#, ~D3DLIGHT_DIRECTIONAL, Single(1.0), 0.0, Single(-1.0), Single(1.0), Single(1.0), Single(0.3)) ~Fast3DSetLight(2, Light#) ~Fast3DLightEnable(2, 0) 'Anisotropischen-Filter setzen ~Fast3DSetFilter(~F3D_ANISOTROPICFILTER) 'Scene einmal rendern um mögliche Fehler zu entdecken hr& = ~Fast3DRenderScene(0) WhileNot scankey(27) sendmessage(ListBox&,$0186,-1,0) SetWindowPos %hwnd=0,0-800,600,1 CASE scankey(37):~Fast3DMoveCamera(Single(-0.1), 0.0, 0.0) CASE scankey(39):~Fast3DMoveCamera(Single(0.1), 0.0, 0.0) CASE scankey(38):~Fast3DMoveCamera(0.0, Single(0.1), 0.0) CASE scankey(40):~Fast3DMoveCamera(0.0, Single(-0.1), 0.0) CASE scankey(36):~Fast3DMoveCamera(0.0, 0.0, Single(0.1)) CASE scankey(35):~Fast3DMoveCamera(0.0, 0.0, Single(-0.1)) IF lt(MouseX%,%MouseX) ~Fast3DRotateCamera(Single(0.1), 0.0, 0.0) MouseX% = %MouseX ElseIF gt(MouseX%,%MouseX) ~Fast3DRotateCamera(Single(-0.1), 0.0, 0.0) MouseX% = %MouseX EndIF IF lt(MouseY%,%MouseY) ~Fast3DRotateCamera(0.0, Single(0.1), 0.0) MouseY% = %MouseY ElseIF gt(MouseY%,%MouseY) ~Fast3DRotateCamera(0.0, Single(-0.1), 0.0) MouseY% = %MouseY EndIF ~Fast3DRenderScene(0) EndWhile hr& = ~Fast3DDeinit() dispose Vertex# dispose Index# dispose mtrl# dispose Light# ~Fast3DReleaseObject(Wand#) ~Fast3DReleaseMesh(Mesh&) dispose Wand# FreeDll hF3D& End Wenn ich nun statt CLS RGB(192,192,192) CLS External("USER32","GetSysColor",15) schreibe kommt die Fehlermeldung: "Exception EAccessViolation im Modul PROFAN.EXE bei 010C6230. Zugriffsverletzung bei Adresse 014C7410. Schreiben von Adresse 28263FE8." Auch wenn ich andere Sachen leicht verändere kommt oft diese Fehlermeldung (z.B. eine andere Datei als Textur). Kann mir jemand helfen? P.S. Mir würde es auch helfen wenn mir jemand sagen kann was die Fehlermeldung bedeutet.
Frank Abbing
| Datum:10.06.02 20:20 |
Hallo, am besten versuchst du diese Variante, die funktioniert: Def GetSysColor(1) !"USER32","GetSysColor" farbe&=GetSysColor(15) Cls farbe& ansonsten sollte... CLS External("USER32","GetSysColor",1) ... auch funktionieren. GetSysColor hat nur einen Parameter und nicht 15... Die Fehlermeldung bedeutet, das ein Speicherbereich überschrieben wurde, für den keine Zugriffsrechte bestehen. Gruß, Frank
Bernhard Künzel
| Datum:10.06.02 20:42 (b.kuenzel@chello.at) |
Hallo Frank, die Funktion von Marcel CLS External("USER32","GetSysColor",15) ist so schon richtig, die 15 sind nicht die Anzahl der Parameter sondern die Farbindex (COLOR_BTNFACE). Gruß Bernhard
Frank Abbing
| Datum:10.06.02 21:16 |
Hallo, ups, 'tschuldigung. Ich benutze External eigentlich nie. Die erste Möglichkeit funktioniert aber, das ist sicher... ;-)) Gruß, Frank
Alexander Schoenfeld
| Datum:11.06.02 08:12 (alexander.schoenfeld@chronologic.de) |
Hallo Marcel! bin mir zwar nicht sicher, aber ich glaube da war irgendwas, das Profan je nach External() oder mit Def andere Wertetypen zurückliefert ( Long / Integer ? ). Grundsätzlich müsste das aber Funktionieren, ich selbst benutze die Funktion mit einem Headerfile ( ~GetSysColor ) und habe keine Probleme ( Profan² 7.5; WinXP Home). Mit freundlichem Gruss / kind regards, Alexander Schoenfeld Email: alexander.schoenfeld@chronologic.de
Horst Horn
| Datum: 11.06.02 19:47 (info@web-treffpunkt.de) |
... ...noch ne *.DLL ;o) CU horst

| Zurück zur Übersicht