?
Hallo,
du mußt schon exakt den Beschreibungen, die du ja gefunden und angegeben hast, folgen. Da steht z.B.:
*These functions must have the following syntax:
void CALLBACK EntryPoint(
HWND hwnd, // handle to owner window
HINSTANCE hinst, // instance handle for the DLL
LPTSTR lpCmdLine, // string the DLL will parse
int nCmdShow // show state
);*
aber du machst daraus:
void HW(void)
{
MessageBox(NULL, "Hi!", "", MB_OK);
}
und das paßt überhaupt nicht zur geforderten Signatur der Funktion. Was du noch beachten mußt, steht hier:
http://support.microsoft.com/kb/q164787/
Damit kannst du aber nur etwas anfangen, wenn du schon mal DLLs programmiert hast, ansonsten noch ein Tutorial für DLLs hinzuziehen (wie werden Funktionen exportiert usw...).
Um auch noch die von dir beobachteten "Phänomene" zu klären (wie ich oben erklärt habe, ist dein Vorgehen völlig inkorrekt, warum erscheint dann trotzdem zweimal die MessageBox?):
RunDLL lädt die DLL, diese wird problemlos gefunden, beim Laden wird DllMain aufgerufen (1. MessageBox). Aber RunDLL entlädt auch die DLL wieder, bei einem solchen Vorgang (DLL_PROCESS_DETACH) wird auch wieder DLLMain aufgerufen (2. MessageBox).
Du hast damit also auf andere Weise die Funktion HW aufgerufen, aber nicht so, wie es für RunDLL gedacht ist. DLLMain hat nichts mit dem für RunDLL nötigen EntryPoint einer aufrufbaren Funktion zu tun.
MfG