Announcement

Collapse
No announcement yet.

Einbinden einer DLL ueber GetProcAddress()

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Einbinden einer DLL ueber GetProcAddress()

    Hallo,

    bisher habe ich überwiegend mit Delphi gewerkelt und benötige jetzt aber eine C++-DLL, die mir die Funktionen einer Delphi-DLL bereitstellt.
    Das DLLHandle erhalte ich auch noch mit LoadLibrary aber danach erhalte ich immer einen NULL-Wert beim Aufruf von GetProcAddress. Das gleiche Problem habe ich auch beim Aufruf einer unter C++ erstellten DLL (s. Beispiel)

    Was mache ich da falsch ?

    Gruß

    Juergen

    //xxxDLL.h

    __declspec(dllexport) double fnDMin(double _v1, double _v2);
    __declspec(dllexport) int fnDMinMax(double _v1, double _v2, double &min, double &max);

    // xxxDLL.cpp

    __declspec(dllexport) double fnDMin(double _v1, double _v2)
    {
    if (_v1 < _v2)
    {
    return _v1;
    } else {
    return _v2;
    }
    }

    __declspec(dllexport) int fnDMinMax(double _v1, double _v2, double &min, double &max)
    {
    if (_v1 < _v2)
    {
    min = _v1;
    max = _v2;
    }
    else
    {
    min = _v2;
    max = _v1;
    }
    return 0;
    }

    // DLLTester.h
    typedef double (*MinDLL)(double, double);
    typedef int (*MinMaxDLL)(double, double, double *, double *);

    // DLLTester.cpp

    {
    MinDLL pfnMin;
    MinMaxDLL pfnMinMax;

    // DLL laden
    HINSTANCE hDLL = LoadLibrary("xxxDLL.DLL");

    if (hDLL != NULL){
    pfnMin = (MinDLL)GetProcAddress(hDLL, "fnDMin");

    if (pfnMin != NULL)
    {
    dret = pfnMin(v1, v2);

    cout << dret;
    }

    pfnMinMax = (MinMaxDLL)GetProcAddress(hDLL, "fnDMinMax");

    if (pfnMinMax != NULL)
    {
    iret = pfnMinMax(v1, v2, &dmin, &dmax);
    cout << "Min: " << dmin << "Max: " << dmax << endl;
    }
    }

    // DLL freigeben
    FreeLibrary(hDLL);
    }

  • #2
    Wenn ich das richtig sehe hast du die Funktionen der DLL nicht importiert.

    http://www.marquardtnet.info/cecke/tutorials.8/8_dll.htm
    Christian

    Comment


    • #3
      Hallo,

      eigentlich habe ich den DLL-Quellcode nur als Beispiel angehängt, weil ich darin einen Fehler bei der Deklaration vermutet habe.
      Mir geht es letztlich darum, eine fertig compilierte DLL (z.B. Delphi) einzubinden. Und da gelingt es mir einfach nicht, eine der Funktionen einzubinden. Der pointer auf eine der Funktionen liefert mir jedesmal eine 0 ....

      Der Link hat mir leider nicht weitergeholfen, da er auch nur das Standardbeispiel enthält. Da sehe ich keinen Unterschied zu den von mir verwendeten Aufrufkonventionen.

      Gruß

      Jürge

      Comment

      Working...
      X