dll einbinden/lib not found
Übersicht

![]() |
tixBetreff: dll einbinden/lib not found |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich hab versucht eine dll einzubinden
ich habe sie in die userlibs kopiert und eine decls datei geschrieben beide sind definitiv richtig das kuriose sie hat schon mal funktioniert und zwar auf arbeit doch bei mir zuhause geht sie auf einmal nicht mehr kennt jemand evtl das problem und hat ne erklärung dafür |
||
- Zuletzt bearbeitet von tix am Fr, Apr 11, 2008 18:32, insgesamt einmal bearbeitet
ChristianK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Auch wenn du dir sicher bist, dass DLL + Decls stimmen, wäre es gut, wenn du sie hier posten würdest, damit man weiss, worum es überhaupt geht. "Userlib not found" kann nämlich die verschiedensten Ursachen haben. | ||
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT |
![]() |
tix |
![]() Antworten mit Zitat ![]() |
---|---|---|
die dll ist aber noch nicht fertig
es sollen noch mehr funktionen rein Code: [AUSKLAPPEN] .lib "system.dll" setsyswin(x,y,d) getsyswinx() getsyswiny() getsyswind() setprohigh() setpronormal() getpro() leftklick() rightklick() leftklickxy(x,y) rightklickxy(x,y) Code: [AUSKLAPPEN] //--------------------------------------------------------------------------- #include <vcl.h> #include <windows.h> #pragma hdrstop //--------------------------------------------------------------------------- // Wichtiger Hinweis zur DLL-Speicherverwaltung, falls die DLL die statische // Version der Laufzeitbibliothek (RTL) verwendet: // // Wenn die DLL Funktionen exportiert, die String-Objekte (oder Strukturen/ // Klassen, die verschachtelte Strings enthalten) als Parameter oder Funktionsergebnisse übergibt, // muss die Bibliothek MEMMGR.LIB im DLL-Projekt und anderen Projekten, // die die DLL verwenden, vorhanden sein. Sie benötigen MEMMGR.LIB auch dann, // wenn andere Projekte, die die DLL verwenden, new- oder delete-Operationen // auf Klassen anwenden, die nicht von TObject abgeleitet sind und die aus der DLL exportiert // werden. Durch das Hinzufügen von MEMMGR.LIB wird die DLL und deren aufrufende EXEs // angewiesen, BORLNDMM.DLL als Speicherverwaltung zu benutzen. In diesem Fall // sollte die Datei BORLNDMM.DLL zusammen mit der DLL weitergegeben werden. // // Um die Verwendung von BORLNDMM.DLL, zu vermeiden, sollten String-Informationen als "char *" oder // ShortString-Parameter weitergegeben werden. // // Falls die DLL die dynamische Version der RTL verwendet, müssen Sie // MEMMGR.LIB nicht explizit angeben. //--------------------------------------------------------------------------- #pragma argsused int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved) { return 1; } //--------------------------------------------------------------------------- // Grafik anweisungen extern "C" __declspec(dllexport) bool _stdcall setsyswin(int x,int y,int d) { DEVMODE sDevMode; ZeroMemory(&sDevMode, sizeof(DEVMODE)); sDevMode.dmSize = sizeof(DEVMODE); sDevMode.dmPelsWidth = x; sDevMode.dmFields |= DM_PELSWIDTH; sDevMode.dmPelsHeight = y; sDevMode.dmFields |= DM_PELSHEIGHT; sDevMode.dmBitsPerPel = d; sDevMode.dmFields |= DM_BITSPERPEL; LONG rVal = ChangeDisplaySettings(&sDevMode, CDS_UPDATEREGISTRY); switch (rVal) { case DISP_CHANGE_SUCCESSFUL: return true; //The settings change was successful. default: return false; } } extern "C" __declspec(dllexport) int _stdcall getsyswinx() { return GetSystemMetrics(SM_CXSCREEN); } extern "C" __declspec(dllexport) int _stdcall getsyswiny() { return GetSystemMetrics(SM_CYSCREEN); } extern "C" __declspec(dllexport) int _stdcall getsyswind() { return GetDeviceCaps(GetDC(GetDesktopWindow()),BITSPIXEL); } //Process funktionen extern "C" __declspec(dllexport) void setprohigh() { SetPriorityClass(GetCurrentProcess(), 128); } extern "C" __declspec(dllexport) void _stdcall setpronormal() { SetPriorityClass(GetCurrentProcess(), 32); } extern "C" __declspec(dllexport) int _stdcall getpro() { return GetPriorityClass(GetCurrentProcess()); } // maus steuerung extern "C" __declspec(dllexport) void _stdcall leftklick() { mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); } extern "C" __declspec(dllexport) void _stdcall rightklick() { mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0); mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0); } extern "C" __declspec(dllexport) void _stdcall leftklickxy(int x,int y) { mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_MOVE,x,y,0,0); mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); } extern "C" __declspec(dllexport) void _stdcall rightklickxy(int x,int y) { mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_MOVE,x,y,0,0); mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0); mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0); } // ende |
||
ChristianK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Die Funktionsnamen in der Decls-Datei stimmen nicht.
Bei der Methode, die du verwendet hast ( __declspec( dllexport ) + __stdcall ), werden die Funktionen nicht mit dem originalen Namen exportiert, sondern bekommen vorher einen Unterstrich und dahinter ein @, dem die Anzahl der als Argumente übergebenen Bytes folgt. Aus "setsyswin" wird also "_setsyswin@12". Damit du die Funktionen mit ihren richtigen Namen verwenden kannst, schreibst du einfach folgendes: Code: [AUSKLAPPEN] setsyswin%( x%, y%, d% ) : "_setsyswin@12"
Und noch zwei Sachen, die mir aufgefallen sind: es ist besser, wenn alle Funktionen den Rückgabetyp int ( oder ggf. float ), weil Blitz3D nur mit diesen umgehen kann. Bool hat bei VC zwar auch 4 Byte, bei manchen Compilern aber nur 1 Byte. Und zweitens können alle Funktionen, die du verwendet hast, auch direkt in Blitz verwendet werden ( z.B. GetSystemMetrics ). Dafür braucht es keine eigene DLL. |
||
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group