DLL erstellen und testen???



  • Hi,

    ich weis, das Themea ist oft zu finden, aber es funktioniert absolut nicht bei mir. Ich weis nicht was ich falsch mache. Ich habe eine DLL programmiert, mit einer funktion, die 2 Integer-Werte addiert und das Ergebnis zurückliefern soll.
    Will ich die DLL mit Hilfe der Header-Datei in ein Projekt einbinden bekomme ich immer folgenden Fehler:

    koor.obj : error LNK2001: Nichtaufgeloestes externes Symbol _EdrCenterTextA@12
    Debug/Koordi.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise

    Hier mal der Quellcode:
    //--Edrlib.h------
    #ifdef __cplusplus
    #define EXPORT extern "C"__declspec(dllexport)
    #else
    #define EXPORT __declspec (dllexport)
    #endif

    EXPORT BOOL CALLBACK EdrCenterTextA(HDC, PRECT, PCSTR);
    EXPORT BOOL CALLBACK EdrCenterTextW(HDC,PRECT,PCWSTR);

    #ifdef UNICODE
    #define EdrCenterText EdrCenterTextW
    #else
    #define EdrCenterText EdrCenterTextA
    #endif

    //----Edrlib.cpp

    #include <windows.h>
    #include "edrlib.h"

    int WINAPI DllMain(HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved)
    {
    return TRUE;
    }

    EXPORT BOOL CALLBACK EdrCenterTextA(HDC hdc, PRECT prc, PCSTR pString)
    {
    int iLength;
    SIZE size;

    iLength = lstrlenA(pString);

    GetTextExtentPoint32A (hdc,pString, iLength, &size);
    return TextOutA(hdc, (prc->right - prc->left - size.cx)/2,
    (prc->bottom - prc->top - size.cy)/2,
    pString, iLength);
    }

    EXPORT BOOL CALLBACK EdrCenterTextW (HDC hdc, PRECT prc, PCWSTR pString)
    {
    int iLength;
    SIZE size;

    iLength = lstrlenW(pString);

    GetTextExtentPoint32W(hdc, pString, iLength, &size);

    return TextOutW(hdc, (prc->right- prc->left -size.cx)/2,
    (prc->bottom - prc->top -size.cy)/2,
    pString,iLength);
    }

    Schon mal danke im Voraus!



  • Hallo,
    Standard-C++ kennt keine DLLs. Sieht für mich nach MSVC aus. Also verschiebe ich dich mal dahin.



  • Und ich leite dich mal weiter 😉
    www.mut.de in der Leseecke gibts das Buch "Visual C++ in 21 Tagen" zur online Lektüre,
    dort gibt es auch ein Kapitel über DLLs.

    Devil



  • Die DLL funktioniert ja, aber nur in dem Arbeitsbereich, in dem ich Sie erstellt habe. Es tut nur nicht, wenn ich sie in einem anderen Arbeitsbereich über die Header-Datei includieren will. Ich hab auch viele andere Beispiele ausprobiert, es geht einfch nicht. Den link von mut hab ich auch schon. Das Bsp. ist übrigens aus dem Petzold.



  • Releasemodus hast du für die dll erstellt ?

    Devil



  • Wo ist dein IMPORT
    Du musst nicht nur eine Funktion exportieren sondern auch im verwendeten Programm importieren.

    [ Dieser Beitrag wurde am 28.11.2002 um 07:07 Uhr von Unix-Tom editiert. ]



  • @vagabond im oberen Beitrag
    BTW: Was ist

    includieren

    eigentlich für ein scheiss Wort??? 😃



  • Man kann sich ja auch an unnötigen Dingen aufhängen. Aber das du es für die Zukunft weißt: einbeziehen(to include)



  • @UNIX-Tom:

    Wie importiere eine DLL. Ich hab es mit #import versucht, da bringt er den Fehler, "Fehler beim öffnen der DLL". Ich hab es auch schon mit LoadLibrary probiert, da schmiert er ab, wenn ich die Funktion aus der DLL anwende.



  • #ifdef _DEINEBIB_EXPORTS_
    #define EXPORT  __declspec(dllexport)
    #else
    #define EXPORT __declspec(dllimport)
    #endif
    

    Das kommt in die Header deiner dll

    In die stdafx.h deiner dll definierst du

    #define _DEINEBIB_EXPORTS_
    

    wen du jetzt deine dll kompilierts findet er das define und exportiert die funktionen

    solltest du die Header mit der Lib in einem Projekt einbinden findet er das define nicht und importiert die Funktionen.
    Ich gehe davon aus das du weißt wie man eine dll,Lib,h in ein Projekt einbindet.

    Nun kannst du auf die Funktionen der dll zugreifen. Bekannt sind sie auch da du ja die Header der dll includiert hast.. Die dll wird automatisch bei Programmstart geladen.


Anmelden zum Antworten