Zuerst mal danke für deinen Versuch, doch poste bitten keinen Blödsinn.
Du kannst die DLL nicht wieder "befreien" bevor du die Funktion nicht verwendet hast. Bei einer anderen DLL wird es sicher zu einem Fehler kommen, da die angegebene Adresse dann nicht mehr existiert. Der einzige Grund warum es hier geht ist, dass kernel32.dll sowieso immer geladen ist.
Weiters sind absolut keine nützlichen Kommentare drin.
Außerdem ist es total ineffizient die DLL jedes mal neu zu laden.
Meine ausgebesserte C-Version:
PHP-Code:
// Variable für die Funktion
typedef BOOL (WINAPI *SetConsoleIcon_t)(HICON handle);
// Main-Funktion
int main(void)
{
// Variablen für main()
SetConsoleIcon_t SetConsoleIcon; // Funktions-Variable
HMODULE hKernel32; // Handle für kernel32.dll
HICON ico; // Handle für das Icon
HMODULE hModule; // Handle für eigene Instanz
// kernel32.dll laden
hKernel32 = LoadLibrary("kernel32.dll");
// Hole Adresse der Funktion und setze Funktions-Variable darauf
SetConsoleIcon = (SetConsoleIcon_t)GetProcAdress(hKernel32,"SetConsoleIcon");
// Sollte ein Fehler aufgetreten sein, wird dieser jetzt gemeldet
if (SetConsoleIcon == 0 || hKernel32 == 0)
{
MessageBox(0,"Error loading kernel32.dll or getting Adress of SetConsoleIcon()","Error",0);
return -1;
}
// Instanz holen
hModule = GetModuleHandle(0);
// Icon laden
ico = LoadIcon(hModule, MAKEINTRESOURCE(IDT_ICON1));
// Icon setzen
SetConsoleIcon(hModule, ico);
// Aufräumen
FreeLibrary(hKernel32);
return 0;
}
Ich habe das jetzt frei getippt, hoffe allerdings dass es eher verständlich ist. Allerdings muss man hierbei auch wissen was Resourcen sind.