dll lässt sich nicht aufrufen



  • Soo, nun hab ich meine DLL erstellt..
    Sie sieht so aus :

    // scrs.cpp : Definiert den Einsprungpunkt für die DLL-Anwendung.
    #include <windows.h>
    
    BOOL APIENTRY DllMain( HANDLE hModule, 
                           DWORD  ul_reason_for_call, 
                           LPVOID lpReserved
    					 )
    { 
        return TRUE;
    }
    
    int SaveBitmap(HANDLE aBmp, int width, int height, char *filename) 
    { 
    
        BITMAPINFO *bi  = (BITMAPINFO*) aBmp; 
        void *dibvalues = NULL; 
        HANDLE fileHandle; 
    
        BITMAPFILEHEADER bmfh; 
    
        DWORD bytes_write; 
        DWORD bytes_written; 
    
        ZeroMemory(&bmfh,sizeof(BITMAPFILEHEADER)); 
        bmfh.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER); 
        bmfh.bfSize=(bi->bmiHeader.biSizeImage )+sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER); 
            bmfh.bfType=0x4d42; 
            bmfh.bfReserved1 = 0; 
            bmfh.bfReserved2 = 0; 
    
        fileHandle=CreateFile(filename,GENERIC_READ | GENERIC_WRITE,(DWORD)0,NULL, 
                                                        CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,(HANDLE) NULL); 
        if (fileHandle==INVALID_HANDLE_VALUE) 
        { 
            OutputDebugString("CreateFile failed!\n"); 
            return 0; 
        } 
    
            // Write the BITMAPFILEHEADER 
            bytes_write=sizeof(BITMAPFILEHEADER); 
        if (!WriteFile(fileHandle,(void*)&bmfh,bytes_write,&bytes_written,NULL)) 
        { 
            OutputDebugString("WriteFile failed!\n"); 
            return 0; 
        } 
    
            //Write the BITMAPINFOHEADER 
        bytes_write=sizeof(BITMAPINFOHEADER); 
        if (!WriteFile(fileHandle,(void*) &bi->bmiHeader ,bytes_write,&bytes_written,NULL)) 
        { 
            OutputDebugString("WriteFile failed!\n"); 
            return 0; 
        } 
    
            //Write the Color Index Array??? 
            bytes_write= bi->bmiHeader.biSizeImage;//3*bmih.biHeight*bmih.biWidth; 
        if (!WriteFile(fileHandle,(void*)bi->bmiColors,bytes_write,&bytes_written,NULL)) 
        { 
            OutputDebugString("WriteFile failed!\n"); 
            return 0; 
        } 
    
        CloseHandle(fileHandle); 
    
        return 1; 
    }  
    
    __declspec ( dllexport ) int CALLBACK SaveClipboard(HWND hWnd, char *filename)
    {
       HANDLE   hBitmap;
       DEVMODE   Dev;
    
        /* ClipBoard laden */
       OpenClipboard(hWnd);
       hBitmap = GetClipboardData(CF_DIB);
       CloseClipboard();   
    
       /* Bildschirmeigenschaften holen */   
       Dev.dmSize = sizeof(DEVMODE);
       EnumDisplaySettings (NULL, ENUM_CURRENT_SETTINGS, &Dev);
    
       /* Bild sichern */
       SaveBitmap (hBitmap, Dev.dmPelsWidth, Dev.dmPelsHeight, filename);
    
       return 0;
    }
    

    die Header ist immernoch

    #ifndef SCRS_H
    #define SCRS_H
    
    #include <windows.h>
    
    __declspec ( dllexport ) int CALLBACK SaveClipboard(HWND hWnd, char *FileName);
    
    #endif
    

    und aufrufen will ich das Ganze so :

    // dlltest.cpp : Definiert den Einsprungpunkt für die Anwendung.
    //
    
    #include "windows.h"
    #include "scrs.h"
    
    int APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow )
    {
     	// ZU ERLEDIGEN: Fügen Sie hier den Code ein.
    
           SaveClipboard (NULL, "test.bmp");
    
    	return 0;
    }
    

    beim Linken hat das tolle Studio diese Meinung zu meinem Kot- äeh Code:

    --------------------Konfiguration: dlltest - Win32 Debug--------------------
    Kompilierung läuft...
    dlltest.cpp
    Linker-Vorgang läuft...
    dlltest.obj : error LNK2001: Nichtaufgeloestes externes Symbol "int __stdcall SaveClipboard(struct HWND__ *,char *)" (?SaveClipboard@@YGHPAUHWND__@@PAD@Z)
    Debug/dlltest.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise
    Fehler beim Ausführen von link.exe.

    dlltest.exe - 2 Fehler, 0 Warnung(en)

    Hab schon etwas rumgespielt, aber ich finde weder ne Einstellung die ich vornehmen müsste, noch nen Fehler (wobei ich in Sachen DLL nen Laie bin)...

    Die DLL hab ich ins Verzeichnis kopiert in dem auch meine exe läuft...

    Was mach ich falsch?



  • Du musst die Lib-Datei, die beim Erstellen der DLL erzeugt wurde, mitlinken 🙂


Anmelden zum Antworten