| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
| Autor |
Nachricht |
24dan
Anmeldedatum: 26.06.2006 Beiträge: 243 Wohnort: position 23 Hamburg
|
Verfasst am: Mo Dez 28, 2009 12:09 Titel: [gelöst] fremde dll einbinden ( LabView - QT ) |
|
|
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: |
#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: _________________ "Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg)
Zuletzt bearbeitet von 24dan am Do Jan 14, 2010 11:26, insgesamt 2-mal bearbeitet |
|
| Nach oben |
|
 |
Christian81
Anmeldedatum: 26.08.2004 Beiträge: 5296 Wohnort: Bremen
|
Verfasst am: Mo Dez 28, 2009 16:40 Titel: |
|
|
LabView kann wohl nichts mit MinGW anfangen - da können wir auch nichts gegen machen. --> bei LaView anfragen. _________________ MfG Christian
chehrlic.blogspot.com
Newbies bitte beachten! |
|
| Nach oben |
|
 |
24dan
Anmeldedatum: 26.06.2006 Beiträge: 243 Wohnort: position 23 Hamburg
|
Verfasst am: Mo Dez 28, 2009 17:47 Titel: |
|
|
Ohje,
na da sehe ich schwarz. Wird wohl auf neuprogrammierung hinauslaufen.  _________________ "Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg) |
|
| Nach oben |
|
 |
Curtis Newton
Anmeldedatum: 11.06.2008 Beiträge: 117
|
Verfasst am: Di Dez 29, 2009 8:34 Titel: |
|
|
| 24dan hat Folgendes 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. |
|
| Nach oben |
|
 |
24dan
Anmeldedatum: 26.06.2006 Beiträge: 243 Wohnort: position 23 Hamburg
|
Verfasst am: Mo Jan 04, 2010 11:13 Titel: |
|
|
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.
 _________________ "Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg) |
|
| Nach oben |
|
 |
Christian81
Anmeldedatum: 26.08.2004 Beiträge: 5296 Wohnort: Bremen
|
Verfasst am: Mo Jan 04, 2010 12:10 Titel: |
|
|
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! _________________ MfG Christian
chehrlic.blogspot.com
Newbies bitte beachten! |
|
| Nach oben |
|
 |
24dan
Anmeldedatum: 26.06.2006 Beiträge: 243 Wohnort: position 23 Hamburg
|
Verfasst am: Do Jan 14, 2010 10:56 Titel: |
|
|
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: |
#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: |
0x9e70000
handle erhalten
3
adresse der fkt erhalten
alles okay
|
add.dll wird unter anderem unter /debug und C:/windows gesucht.
 _________________ "Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg) |
|
| Nach oben |
|
 |
|