[gelöst] fremde dll einbinden ( LabView - QT )

Dein Thema passt einfach in kein Forum? Dann probiers mal hier.
Antworten
24dan
Beiträge: 274
Registriert: 26. Juni 2006 14:15
Wohnort: Hamburg

[gelöst] fremde dll einbinden ( LabView - QT )

Beitrag 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:
Dateianhänge
dll_01.JPG
dll_01.JPG (20.7 KiB) 8133 mal betrachtet
Zuletzt geändert von 24dan am 14. Januar 2010 11:26, insgesamt 2-mal geändert.
"Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg)
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

LabView kann wohl nichts mit MinGW anfangen - da können wir auch nichts gegen machen. --> bei LaView anfragen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
24dan
Beiträge: 274
Registriert: 26. Juni 2006 14:15
Wohnort: Hamburg

Beitrag von 24dan »

Ohje,
na da sehe ich schwarz. Wird wohl auf neuprogrammierung hinauslaufen. :roll:
"Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg)
Curtis Newton
Beiträge: 122
Registriert: 11. Juni 2008 18:39

Beitrag von Curtis Newton »

24dan hat geschrieben:Ohje,
na da sehe ich schwarz. Wird wohl auf neuprogrammierung hinauslaufen. :roll:
Oder Du passt die platdefines.h für den mingw an. Keine Ahnung, wie und ob das geht.

C.
24dan
Beiträge: 274
Registriert: 26. Juni 2006 14:15
Wohnort: Hamburg

Beitrag 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.

:roll:
"Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg)
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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!
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
24dan
Beiträge: 274
Registriert: 26. Juni 2006 14:15
Wohnort: Hamburg

Beitrag 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.

:lol:
"Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg)
Antworten