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); #endifund 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
