Wie ich schon sagte gibt es da zwei verschiedene Ansätze.
1. Laden der Lib beim Programmstart
2. Laden der Lib zur Laufzeit (so wie Du es derzeit machst)
2. geht nur wirklich einfach wenn man C-only Funktionen benutzt oder es als Plugin einsetzt (d.h. im Grunde eine C-only - Funktion die einen Ptr auf eine schöne virtuelle Klasse zurückgibt).
Wenn nichts wichtiges dagegen spricht ist 1.) immer vorzuziehen.
Hallo Christian,
es ist zwar schon ein paar Jahre her, aber kannst du mir vielleicht trotzdem erklären wie ich eine DLL beim Programmstart lade und dann im Programm die Funktionen aufrufe? QLibrary lädt, laut Trolltech, nur während der Laufzeit DLL Dateien (also kann ich die Klasse nicht benutzen).
libHeader
Code: Alles auswählen
#ifndef GEOMETRICS_H
#define GEOMETRICS_H
#ifdef Q_WS_WIN
#define MY_EXPORT __declspec(dllexport)
#else
#define MY_EXPORT
#endif
#include <QtOpenGL>
extern "C" MY_EXPORT void drawSkyBox(const int textures, const GLfloat sz);
extern "C" MY_EXPORT void drawSkyDome(const int textures, const GLfloat sz);
extern "C" MY_EXPORT void drawSkySphere(const GLfloat sz);
extern "C" MY_EXPORT void drawGround(int texture);
extern "C" MY_EXPORT void wirePyramid();
extern "C" MY_EXPORT void solidPyramid();
extern "C" MY_EXPORT void wireCube();
extern "C" MY_EXPORT void solidCube();
extern "C" MY_EXPORT void texCube(const int texture);
extern "C" MY_EXPORT void wireSphere(float radius, int slices, int stacks);
extern "C" MY_EXPORT void solidSphere(float radius, int slices, int stacks);
#endif
libMain
Code: Alles auswählen
#include "geometrics.h"
#include <math.h>
extern "C" MY_EXPORT void wireSphere(float radius, int slices, int stacks)
{}
extern "C" MY_EXPORT void solidSphere(float radius, int slices, int stacks)
{}
extern "C" MY_EXPORT void drawGround(int texture)
{}
libProjectFile
Code: Alles auswählen
TEMPLATE = lib
HEADERS += geometrics.h
SOURCES += geometrics.cpp
QT += opengl
CONFIG += qt warn_on release dll
main.cpp
Code: Alles auswählen
...
void RenderThread::draw()
{
...
drawSkyBox(textures[2], 25.0f); //hier das problem
...
}
...
mainProjectFile
Code: Alles auswählen
TEMPLATE = app
DESTDIR = bin
OBJECTS_DIR = bin/build
MOC_DIR = bin/build
UI_DIR = bin/build
unix:LIBS += -L/usr/local/lib -lgeometrics
win32:LIBS += "C:/Dokumente und Einstellungen/b600693/Desktop/target/lib/geometrics.dll"
RESOURCES = textures.qrc
HEADERS += src/openglwindow.h src/renderthread.h src/inputthread.h
SOURCES += src/openglwindow.cpp src/renderthread.cpp src/inputthread.cpp src/main.cpp
QT += opengl
CONFIG += qt release
DLL ist erstellt und kompilieren geht auch. Nur wie spreche ich jetzt in der main die DLL-Funktionen an?
Danke schonmal im voraus!
Bitte seid so nett und ändert den Titel von Beiträgen die gelöst wurden, auf [gelöst] Beitragstitel