Registriert: Di Nov 07, 2006 13:37 Beiträge: 83 Wohnort: Partenheim
Hi!
Vor kurzem hab' ich angefangen, eine meiner Units in eine dll zu verpacken.
Eine Methode davon erstellt eine Liste mittels glGenLists(...).
Beim externen Aufrufen dieser Methode, bekomme ich jedoch folgende Exception:
"Zugriffsverletzung bei Adresse 00000000. Lesen von Adresse 00000000"
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Was benutzt du denn für einen Header? Die dglOpenGL? Wenn ja dann musst du natürlich in der DLL auch dort die opengl32.dll laden und deren Funktionspointer auslesen. Kurzum du musst den Header initialisieren. InitOpenGL, ReadExtensions und ReadImplementedProperties.
Einen neuen Kontext benötigst du nicht (darfst du nicht erstellen), da automatisch der Kontext des Threads benutzt wird. Also der der Hauptanwendung. Entsprechend musst du vor dem Laden in der DLL auch schon dafür sorgen, dass ein Kontext existiert und aktiviert wurde.
Registriert: Di Nov 07, 2006 13:37 Beiträge: 83 Wohnort: Partenheim
Tatsächlich, es liegt an der Initialisierung. Und somit liegt es nicht am Erstellen einer Liste, sondern am Aufrufen einer OpenGL-Funktion Mal wieder vielen Dank, Lossy Ex.
Es wundert mich nur, dass die Hauptanwendung, bevor sie irgendeine Methode aus der dll aufruft, bereits InitOpenGL() aufgerufen hat. Wieso muss denn dann für die dll zusätzlich noch einmal der Header initialisiert werden?
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Weil die Variablen in der Unit separat für die DLL vorliegen. Schließlich ist die dglOpenGL.pas eine dann in die DLL einkompilierte Datei, die ihren eigenen Speicher hat. Von daher werden auch die Adressen separat gesetzt.
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Genau. Das was Lord Horazont sagt stimmt. Und falls dz dich wunderst warum man im Hauptprogramm kein InitOpenGL aufrufen muss. Das liegt wohl daran, dass du CreateRenderContext aus dem Header benutzt. Da passiert das schon automatisch.
Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.