Seite 1 von 1

DLL - Shared Library - Parameter und ReturnWert

Verfasst: 28. August 2012 15:24
von conan2011
Ich erstelle gerade mit Qt eine minimale DLL.
Kompilieren: klappt!
Funktionsaufruf: klappt!(per Konsole mit rundll32.exe)
Aber:
Funktionsparameter übergeben: Klappt NICHT
ReturnWert erhalten: Kappt NICHT


Es ist mit ein Rätsel, warum die Funktion "foo" nicht den übergebenen Parameter ausliest

Hier mein Code:

myDll.pro

Code: Alles auswählen

    TEMPLATE = lib
    HEADERS += main.h
    SOURCES += main.cpp
    DEFINES += TEST
main.h

Code: Alles auswählen

#include <QtGui>

#if defined TEST
#define TEST_COMMON_DLLSPEC  Q_DECL_EXPORT
#else
#define TEST_COMMON_DLLSPEC  Q_DECL_IMPORT
#endif

extern "C" TEST_COMMON_DLLSPEC int foo(int a);
main.cpp

Code: Alles auswählen

#include <QtGui>
#include <QFile>
#include "main.h"

int foo(int a)
{
    QFile file(QString("C:/main_%0.txt").arg(QString::number(a)));
    if (file.open(QIODevice::WriteOnly | QIODevice::Text))
    {
        file.write("Klappt");
        file.close();
    }
    return 12;
}
Wenn ich als Parameter eine Zahl übergebe, z.B. 5, blaibt die Variable "a" dennoch immer unbeschrieben, bzw. enthält den Wert, der gerade zufällig an der Speicheradresse von a steht, und das ist immer IRGENDeiner
Rückgabewert erhalte ich auch nicht :/

Weiß jemand Rat?

Re: DLL - Shared Library - Parameter und ReturnWert

Verfasst: 28. August 2012 18:11
von Christian81
Und wo ist Dein Hauptprogramm?

Re: DLL - Shared Library - Parameter und ReturnWert

Verfasst: 29. August 2012 11:35
von conan2011
Hauptprogramm? Sowas wie eine "main()" innerhalb der DLL?
Ist das nötig?

Die DLL soll nur ein paar Hilf-Funktionen bereitstellen, darum gibt es kein "Hauptprogramm" sondern nur eine Funktion "foo(...)".

Re: DLL - Shared Library - Parameter und ReturnWert

Verfasst: 29. August 2012 12:06
von brax
Nein, in der dll ist das nicht nötig. Zum Testen der dll allerdings schon. rundll32.exe eignet sich nur sehr beschränkt für dieses Testen: http://de.wikipedia.org/wiki/Rundll32#T ... lerquellen

Schreib doch einfach noch ein Hauptprogramm, mit dem Du die dll lädst (kannst Du auch per import library machen) und die Funktion aufrufst. Wenn da auch Probleme auftreten, poste den Code und die Fehlerbeschreibung.