2 Fragen zu Dll's ...
-
Hallo,
ich müsste da mal ein paar Fragen geklärt kriegen, die mit Dll's zu tun haben...
-
Wenn ich die Headerdatei und die Libdatei einer Dll in mein Projekt mit inkludiert habe, und dann noch die Dll in das Exe-verzeichnis meines Programmes getan habe, muss ich dann noch die Dll mittels LoadLibrary() etc. laden? Oder kann ich auch so die Funktionen der Dll verwenden ?
-
Wenn die Dll eine Message mit SendMessage an mein Hauptprogramm sendet, dann kann ich diese Message doch so empfangen :
#define WM_TEST (WM_USER+2)
BEGIN_MESSAGE_MAP(CDeinDlg, CDialog) ON_MESSAGE(WM_TEST, OnTest) END_MESSAGE_MAP()
//{{AFX_MSG(CDeinDlg) afx_msg LRESULT OnTest(WPARAM wParam, LPARAM lParam); //}}AFX_MSG
So, hab doch alles beachtet oder ?
Danke für jeden der mir ein paar Tips etc. gibt...
Jiggy
-
-
zu 1: Ja so geht es. Die Header includen und die Lib linken. Die DLL wird bei Programmstart geladen.
LoadLib braucht man nur wenn man die DLL zur Laufzeit laden will ohne vorher die Header zu includen und eine LIB zu linken.zu 2: Warum versucht du es nicht einfach.
-
Danke.
Joa, versucht habe ich es ja, aber es funktioniert nicht. Mir scheint es sogar so als würde die Funktion nicht mal aufgerufen werden....
Woran kann das liegen, hab doch nichts vergessen...oder?
DANKE, Jiggy
-
Bekommst du ne Fehlermeldung?
-
Ne, ich bekomme keine Fehlermeldung. Vielleicht wird auch gar keine Message an mein Hauptprog gesendet ...
-
IMHO habe ich noch nie gesehen das Funktionen in einer DLL eine Nachricht schicken. DLL ist ja eine Bibliothek und beinhaltet Funktionen.
Diese Funktionen rufst du vom Hauptthread oder eigene Thread auf. Warum solltets du da eine Nachricht an diese Thread senden. Mach ein return und übergib einen Wert.
-
Unix-Tom schrieb:
IMHO habe ich noch nie gesehen das Funktionen in einer DLL eine Nachricht schicken.
Na dann schau mal hier in der KeyboardHookProc() nach...
http://www.c-plusplus.net/forum/viewtopic-var-t-is-39383-and-highlight-is-hook.htmlJiggy
-
Mir ging es nicht darum das es nicht geht sondern das ich den Sinn dahinter nicht sehe.
Ein Hook ist ein Spezialfall.
-
Hmm, und was mach ich jetzt? Es wird einfach keine Message gesendet...
Auch wenn ich in der KeyboardHookProc-Funktion eine MessageBox ausgeben möchte, dann wird sie einfach nicht aufgerufen. Das sagt mir doch, dass die Funktion nicht mal aufgerufen wird...oder?
Jiggy
-
Hast du in der DLL bei verwendung der MFC
AFX_MANAGE_STATE(AfxGetStaticModuleState());drin?
An welches Fenster versedest du die Nachricht
-
Unix-Tom schrieb:
Hast du in der DLL bei verwendung der MFC
AFX_MANAGE_STATE(AfxGetStaticModuleState());
drin?Hmm, egal in welcher Funktion ich AFX_MANAGE_STATE(AfxGetStaticModuleState()); einsetze, immer erscheinen diese Fehler :
mfcs42.lib(dllmodul.obj) : error LNK2005: __pRawDllMain already defined in hookdll.obj
mfcs42.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in hookdll.obj
mfcs42.lib(dllmodul.obj) : warning LNK4006: __pRawDllMain already defined in hookdll.obj; second definition ignored
mfcs42.lib(dllmodul.obj) : warning LNK4006: _DllMain@12 already defined in hookdll.obj; second definition ignored
Creating library Release/hookdll.lib and object Release/hookdll.exp
Release/hookdll.dll : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.Unix-Tom schrieb:
An welches Fenster versedest du die Nachricht
Naja, an das Hauptfenster der EXE, so verwende ich die Funktion SetupHook() :
SetupHook(this->m_hWnd);
Ist doch nichts falsch oder ?
Danke, Jiggy
-
Verwendest du MFC in der DLL?
Welche DLL hast Du?http://www.c-plusplus.net/forum/viewtopic-var-t-is-112764.html
-
Unix-Tom schrieb:
Welche DLL hast Du?
Ich verwende eine MFC-Erweiterungs DLL...
-
SChreibst du einen Hook?
Wenn Ja, warum hälts Du dich nicht an das Bespiel.
-
Muss ich etwa bei dem Beispiel eine standard DLL verwenden? Keine Erweiterungsdll ...
-
Hallo Unix-Tom,
habe jetzt eine standard DLL geschrieben und sie genau so in mein EXE-Projekt eingebunden wie bei der Erweiterungsdll. Doch jetzt habe ich das Problem, dass wenn ich mein EXE-Projekt kompiliere, dass immer diese Fehler angezeigt werden:
error C2065: 'SetupHook' : undeclared identifier
error C2065: 'UninstallHook' : undeclared identifierDann habe ich mir überlegt, dass es sicherlich an der Headerdatei liegt, obwohl ich beide Funktionen, SetupHook und UninstallHook, in der Header unter public angelegt habe. Jedoch habe ich die beiden Funktionen nicht mit extern "C" __declspec (dllexport) angelegt, da sonst diese fehler angezeigt werden:
Code in Header der DLL:
class CHookApp : public CWinApp { public: CHookApp(); extern "C" __declspec (dllexport) BOOL CALLBACK SetupHook (HWND); extern "C" __declspec (dllexport) BOOL CALLBACK UninstallHook (void); ..... ..
Fehler:
error C2059: syntax error : 'string'
error C2238: unexpected token(s) preceding ';'
error C2059: syntax error : 'string'
error C2238: unexpected token(s) preceding ';'Ich hoffe du kannst mir helfen...
Danke, Jiggy
-
Hallo,
kann mir denn niemand helfen...
Danke, Jiggy
-
In der Datei "stdafx.h" sind alle #include Anweisungen auszukommentieren und dafür das hineinzuschreiben:
#include <windows.h>
Da du ja eine Hook-DLL bauen willst, brauchst du die MFC nicht.
-
Danke, aber wenn ich alle includes auskommentiere, dann kommt dieser Fehler:
fatal error C1189: #error : include 'stdafx.h' before including this file for PCH
Warum das ?
Danke, Jiggy