Seite 1 von 1
[gelöst] fremde dll einbinden ( LabView - QT )
Verfasst: 28. Dezember 2009 12:09
von 24dan
Hallo,
ich habe mir unter einer anderen Programmiersprache (LabView8.2) eine dll gebaut die einfach zum Test zwei Zahlen (A, B) zum (*Erg) aufaddiert.
Ich habe schon im Forum und in der QT Hilfe gesucht. Wie bindet man den eine fremde dll ein?
Hier mal die Header für die dll
Code: Alles auswählen
#include "extcode.h"
#pragma pack(push)
#pragma pack(1)
#ifdef __cplusplus
extern "C" {
#endif
double __stdcall Testadd(double A, double B);
long __cdecl LVDLLStatus(char *errStr, int errStrLen, void *module);
#ifdef __cplusplus
} // extern "C"
#endif
#pragma pack(pop)
Anbei die Fehlermeldung:
Verfasst: 28. Dezember 2009 16:40
von Christian81
LabView kann wohl nichts mit MinGW anfangen - da können wir auch nichts gegen machen. --> bei LaView anfragen.
Verfasst: 28. Dezember 2009 17:47
von 24dan
Ohje,
na da sehe ich schwarz. Wird wohl auf neuprogrammierung hinauslaufen.

Verfasst: 29. Dezember 2009 08:34
von Curtis Newton
24dan hat geschrieben:Ohje,
na da sehe ich schwarz. Wird wohl auf neuprogrammierung hinauslaufen.

Oder Du passt die platdefines.h für den mingw an. Keine Ahnung, wie und ob das geht.
C.
Verfasst: 4. Januar 2010 11:13
von 24dan
Also ich glaub das noch nicht ganz.
Hat jemand ein Beispiel wie man eine dll in QT Projekte einbindet?
Ich habe in meinem Beispiel nichts an der pro Datei geändert und müsste dort wohl wenigstens die dll als Resource angeben oder? Aber wie?
Bisher habe ich :
- nur die header datei eingebunden
- und die Fkt augerufen
- und die dll im gleichen Verzeichnis.

Verfasst: 4. Januar 2010 12:10
von Christian81
Nochmal: Das ganze hat nichts mit irgendwelchen DLLs oder was auch immer zu tun sondern nur dass eine Header-Datei deinen Compiler nicht kennt. Und da die Header-Datei von LabView ist -> dort anfragen!
Verfasst: 14. Januar 2010 10:56
von 24dan
So da sind wir wieder (hat etwas gedauert...)
Mit Hilfe von NI habe ich es jetzt geschafft:
1. die dll dynamisch zu laden.
2. der "add" Funktion Parameter zu übergeben und
3. das Ergebnis erhalten!
Hier mal der dynamische Aufruf mit Funktion, Wertübergabe und Ausgabe...
Code: Alles auswählen
#include <windows.h>
#include <stdio.h>
typedef double (__cdecl *funktion1)(double A, double B);
funktion1 f1;
Stuff...
HINSTANCE hinstLib;
BOOL fFreeResult, fRunTimeLinkSuccess = FALSE;
// Get a handle to the DLL module.
hinstLib = LoadLibraryA("add.dll");
qDebug()<<hinstLib;
// If the handle is valid, try to get the function address.
if (hinstLib != NULL)
{
qDebug()<<"handle erhalten";
f1 = (funktion1) GetProcAddress(hinstLib, "Add");
qDebug()<<f1(1,2);
// If the function address is valid, call the function.
if (fRunTimeLinkSuccess = (f1 != NULL)) qDebug()<<"adresse der fkt erhalten";
else qDebug()<<"schlecht";
// Free the DLL module
fFreeResult = FreeLibrary(hinstLib);
}
if (! fRunTimeLinkSuccess)qDebug()<<"tja keine Adresse";
else qDebug()<<"alles okay";
Stuff...
Ausgabe meines Programms:
Code: Alles auswählen
0x9e70000
handle erhalten
3
adresse der fkt erhalten
alles okay
add.dll wird unter anderem unter /debug und C:/windows gesucht.
