Hi Leute!
Ich habe gestern sehr viel Zeit mit dlls verbracht, wollte bisschen rumprobieren, aber eines vestehe ich nicht ... in dem Buch was ich lese steht, dass jedes Mal wenn ein Programm die DLL braucht und sie geladen wird, die Funktion DllMain aufgerufen wird ... ich hab deshalb um das zu überprüfen eine Funktion MessageBox eingebaut und bin zum Entschluss gekommen, dass die Funktion gar nicht aufgerufen wird ... ich kann Funktionen exportieren und sie von einem anderen Programm aufrufen, aber DllMain wird trotzdem NIE aufgerufen, ist das normal? Oder war der Autor, wo er das Buch schrieb nicht mehr ganz nüchtern?
hier ist der Code vom Hauptprogramm:
und hier ist der Code von meiner DLL:
würde mich freuen, wenn mir wer helfen könnte, so dass die Meldung "test auch automatisch beim Laden der Dll angezeigt wird... Danke!
Ich habe gestern sehr viel Zeit mit dlls verbracht, wollte bisschen rumprobieren, aber eines vestehe ich nicht ... in dem Buch was ich lese steht, dass jedes Mal wenn ein Programm die DLL braucht und sie geladen wird, die Funktion DllMain aufgerufen wird ... ich hab deshalb um das zu überprüfen eine Funktion MessageBox eingebaut und bin zum Entschluss gekommen, dass die Funktion gar nicht aufgerufen wird ... ich kann Funktionen exportieren und sie von einem anderen Programm aufrufen, aber DllMain wird trotzdem NIE aufgerufen, ist das normal? Oder war der Autor, wo er das Buch schrieb nicht mehr ganz nüchtern?
hier ist der Code vom Hauptprogramm:
Code:
#include <windows.h>
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
__declspec (dllimport) void Meldung(char *);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
static char szAppName[]= "Progi";
HWND hwnd;
MSG msg;
WNDCLASS wndclass;
wndclass.style= CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc= WndProc;
wndclass.cbClsExtra= 0;
wndclass.cbWndExtra= 0;
wndclass.hInstance= hInstance;
wndclass.hIcon= LoadIcon(NULL, IDI_APPLICATION);
wndclass.hCursor= LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground= (HBRUSH) (COLOR_BTNFACE + 1);
wndclass.lpszMenuName= NULL;
wndclass.lpszClassName= szAppName;
if(!RegisterClass(&wndclass))
{
MessageBox(NULL, "Fehler!", szAppName, MB_ICONERROR);
return 0;
}
hwnd= CreateWindow(szAppName, "Fenster Titel", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
ShowWindow(hwnd, iCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_CREATE:
Meldung("BLUB BLUB BLUB");
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, message, wParam, lParam);
}
Code:
#include <windows.h>
BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
{
switch (reason)
{
case DLL_PROCESS_ATTACH:
MessageBox(NULL, "test", "test", NULL);
break;
}
return TRUE;
}
__declspec (dllexport) void Meldung(char *text)
{
MessageBox(NULL, text, "test", NULL);
}
würde mich freuen, wenn mir wer helfen könnte, so dass die Meldung "test auch automatisch beim Laden der Dll angezeigt wird... Danke!
Zuletzt bearbeitet: