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.