Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Kompilacja GetCurrentConsoleFontEx, SetCurrentConsoleFontEx

Ostatnio zmodyfikowano 2011-04-21 11:40
Autor Wiadomość
malan
» 2011-04-20 20:46:26
Mógłbyś wkleić log kompilacji?
Jaką masz wersję kernela?
P-31325
czarek1959
Temat założony przez niniejszego użytkownika
» 2011-04-20 21:10:51
Wklejam fragment (Twojego) kodu z dodaniem 2 linijek, aby sprawdzić działanie funkcji:
C/C++
int main()
{
    HANDLE outcon = GetStdHandle( STD_OUTPUT_HANDLE ); // to jest moje
   
    HMODULE kernel32 = LoadLibrary( TEXT( "Kernel32.dll" ) );
    if( !kernel32 )
         return 1;
   
    function hGetCurrentConsoleFontEx =( function ) GetProcAddress( kernel32, "GetCurrentConsoleFontEx" );
    if( !hGetCurrentConsoleFontEx )
    {
        FreeLibrary( kernel32 );
        return 2;
    }
   
    CONSOLE_FONT_INFOEX fontInfo;
   
    for( int i = 0; i < LF_FACESIZE; ++i )
         fontInfo.FaceName[ i ] = '\0';
   
    fontInfo.cbSize = sizeof( CONSOLE_FONT_INFOEX );
   
    GetCurrentConsoleFontEx( outcon, false, & fontInfo ); // tu wywołuję funkcję
   
    if( hGetCurrentConsoleFontEx( GetStdHandle( STD_OUTPUT_HANDLE ), FALSE, & fontInfo ) )
         WriteConsole( GetStdHandle( STD_OUTPUT_HANDLE ), fontInfo.FaceName, LF_FACESIZE, 0, 0 );
   
    FreeLibrary( kernel32 );
}
a log kompilatora:
Compiling:
main.cpp
D:\C_plus_plus\Code-Blocks-Programy\Nauka\pdcurses_nauka\10\main.cpp: In function 'int main()':
D:\C_plus_plus\Code-Blocks-Programy\Nauka\pdcurses_nauka\10\main.cpp:39: error: 'GetCurrentConsoleFontEx' was not declared in this scope
Process terminated with status 1 (0 minutes, 0 seconds)
1 errors, 0 warnings
Jeśli chodzi o wersję kernela to jest to 6.1.7600.16385 (czy o to chodziło?), skopiowana/identyczna jak w katalogu C:\Windows\system32.

Jeszcze jedno. Spróbowałem załaodować bibliotekę w poniższy sposób:
C/C++
HMODULE dll = LoadLibrary( "kernel32.dll" ); //Ładujemy
FARPROC proc = GetProcAddress( dll, "GetCurrentConsoleFontEx" ); //Pobieramy wskaźnik na funkcję
typedef void( * TestFunc )();
TestFunc GetCurrentConsoleFontEx =( TestFunc ) proc; //Nasza funkcja
i kompilator zaczął "kumać" co to jest GetCurrentConsoleFontEx(), ale bez parametrów, jak tylko podam parametry, zgodnie ze sztuką i opisem tej funkcji to otrzymuję bład kompilatora - "to many arguments to function ..." Czyli nadal nie działa prawidłowo. Chyba się zaraz poddam !!! Czyżby sama (moja) bibiloteka kernel32.dll, nie posiadała wbudowanych tych funkcji, aż nie chce mi się wierzyć ???
P-31337
malan
» 2011-04-20 21:18:49
Eh... ;) Ten kod jest po to, żeby nie wywoływać właśnie tej funkcji "jawnie" (że tak to ujmę). Przecież (jak już mówiłem), nie masz nawet jej deklaracji w Windows.h. Ten kod pobiera adres na tą funkcję bezpośrednio z kernela. Także skompiluj ten kod bez żadnych własnych poprawek ;)
P-31341
czarek1959
Temat założony przez niniejszego użytkownika
» 2011-04-20 21:26:30
No dobrze, skompilowałem, program się wykonał (bez błedów) w wyświetleniem 3 krzaczków na ekranie i co dalej??? Jak użyć tej funkcji w programie?
P-31345
malan
» 2011-04-20 21:39:35
3 krzaczków? :D To chyba jednak coś nie tak... U mnie wyświetla:
L u c i d a   C o n s o l e
Process returned 0 (0x0)   execution time : 0.103 s
Press any key to continue.

Jak użyć tej funkcji w programie?
Posługując się wskaźnikiem, czyli -
hGetCurrentConsoleFontEx
.
P-31347
czarek1959
Temat założony przez niniejszego użytkownika
» 2011-04-20 21:46:23
Jednak u mnie zamiast nazwy czcionki wyświetlają się 3 przypadkowe krzaczki (zawsze inne przy kolejnej kompilacji) ale kompilator nie zgłasza błedów !!!. Więc chyba coś nadal jest nie tak. Czy robiłeś to pod Code:Blocks (jak ja) czy używając Visuala?
P-31348
czarek1959
Temat założony przez niniejszego użytkownika
» 2011-04-20 21:55:56
Już się wyjaśniło. Sprawdziłem we własciwościach okna konsoli - miałem ustawione "Czcionki rastrowe" i widocznie
z tym funkcja nie mogła dać sobie rady. Zmieniłem na Lucida Console, potem na Consolas i otrzymałęm identyczny rezultat - czyli ok. Zastaniawia mnie tylko dlaczego za każdym razem ustawienia wracają do Czcionek rastrowych i za każdym razem muszę to zmieniać ręcznie we właściwościach okna?
P-31351
czarek1959
Temat założony przez niniejszego użytkownika
» 2011-04-20 22:05:19
Ok. Zamknałem Code:Blocks, oczyściłem pamięc i teraz za każdym razem jest tak jak ustawię czcionkę. Widocznie coś zaśmieciło pamieć ):.
>>>>Bardzo dziękuję Ci za pomoc - super. (dla malana)<<<<<
Wraca mi ochota do dalszej nauki i zamykam temat.
P-31355
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona