GetPrivateProfileString



  • int read_lizenz (void) 
    { 
    	wchar_t szSectionName[] = L"SectionName"; 
    	wchar_t szKeyName[] = L"KeyName"; 
    	char szFilename[] = "C:\\LizenzFile.ini"; 
    	BOOL bRet; 
    	wchar_t szMyValue[128]; 
    	GetPrivateProfileString(szSectionName, 
    		szKeyName, 
    		NULL, 
    		szMyValue, 
    		sizeof(szMyValue), 
    		szFilename); 
    }
    

    So, das ist das was ich mir bisher dachte... Aber naja... Ich komm halt nicht wirlich vorran...

    Was mir jez halt noch an die Hand gegeben worden ist, von dem, für den ich das machen mussen, ist:

    CString strResult;
    CString strPathToFile;
    
    GetPrivateProfileString(_T("Bereich"), _T("Eintrag"), strResult, strResult.GetBuffer(1000), 999, strPathToFile);
    strResult.ReleaseBuffer();
    


  • int read_lizenz (void) 
    { 
        wchar_t szSectionName[] = L"SectionName"; 
        wchar_t szKeyName[] = L"KeyName"; 
        wchar_t szFilename[] = L"C:\\LizenzFile.ini"; 
        BOOL bRet; 
        wchar_t szMyValue[128]; 
        GetPrivateProfileString(szSectionName, 
            szKeyName, 
            NULL, 
            szMyValue, 
            sizeof(szMyValue), 
            szFilename); 
    }
    

    Du kannst nicht Unicode und Multibyte Chars gleichzeitig nutzen...



  • Was ist den unicode? char oder wchar_t ?

    Jedenfalls erhalte ich jetzt wieder eine meiner achso beliebten Fehlermeldungen:

    error C2440: 'initializing' : cannot convert from 'const char [18]' to 'wchar_t []'

    Wenn ich auf den Fehler klicke, landet er genau bei der Stelle wo ich in char gelassen hatte.......



  • Hast du das L vor den String geschrieben? Also L"blabla" ?



  • uhm... vor welchen?

    *sorry, ich seh grad nur noch wald... <<*

    EDIT: Ich weiß wo du meintest ^^ Ja da steht was... Mittlerweile hab ich jetzt keine Fehler mehr... muss jez nur mal schauen,, ob er das auch wirklich ausliest...

    EDIT: Danke Danke~ Ich hab es geschafft... Es wird alles so getätigt, wie ich will xD



  • Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • wieder ein schönes beispiel für die problematik das die MS IDEs default auf unicode stehen aber jeder pups an quellcode für multibyte ist.

    die ganzen tutorial seiten sollten mal die quelltexte aktualisieren/ergänzen damit neulinge zumindest wissen was der unterschied zwischen multibyte und unicode ist.



  • Dann poste mal ein IDE-gerechtes Snippet mit LoadLibrary () und GetProcAddress () unter Verwendung von UNICODE.


  • Mod

    dummer-kommentar schrieb:

    Dann poste mal ein IDE-gerechtes Snippet mit LoadLibrary () und GetProcAddress () unter Verwendung von UNICODE.

    Wirklich ein dummer Kommentar!

    TCHAR szLib[_MAX_PATH];
    ...
    HINSTANCE hInst = LoadLibrary(CT2A(szLib));
    

    Es ist absolut korrekt, dass auf die eigentliche Zeichensatz Problematik in keinem Tutorial frühzeitig eingegangen wird... Viel zu selten wird die T-Notation erwähnt und zu oft Compiler-Schaltern gedrecht.



  • Martin Richter schrieb:

    TCHAR szLib[_MAX_PATH];
    ...
    HINSTANCE hInst = LoadLibrary(CT2A(szLib));
    

    Das CT2A-Makro ist unter Unicode hier eher kontraproduktiv. 😉


  • Mod

    sri schrieb:

    Das CT2A-Makro ist unter Unicode hier eher kontraproduktiv. 😉

    Jupp! Und jetzt schäme ich mich mal...
    Ich habe mich selbst reingelegt, weil ich GetProcAddress meinte für die es nur LPCSTR Parameter gibt. Aber LoadLibrary geschrieben habe für das es eine A+W Variante gibt...



  • Martin Richter schrieb:

    weil ich GetProcAddress meinte, für die es nur LPCSTR Parameter gibt.

    bzw. nur LPCWSTR Parameter ;). Aber dafuer gibt's dann ja noch die GetProcAddressA :).



  • Superlexx schrieb:

    Martin Richter schrieb:

    weil ich GetProcAddress meinte, für die es nur LPCSTR Parameter gibt.

    bzw. nur LPCWSTR Parameter ;). Aber dafuer gibt's dann ja noch die GetProcAddressA :).

    Es gibt weder GetProcAddressA noch GetProcAddressW, sondern nur GetProcAddress. GetProcAddress nimmt nur LPCSTR entgegen. Man schreibt also sowohl in Ansi als auch in Unicode immer

    FARPROC pfnProc = GetProcAddress(hModule, "WasauchimmerderNamederFunktionist");
    


  • sri schrieb:

    Es gibt weder GetProcAddressA noch GetProcAddressW, sondern nur GetProcAddress. GetProcAddress nimmt nur LPCSTR entgegen.

    Nanana, warum so kategorisch? Zitat Winbase.h:

    #ifdef UNDER_CE
    #define GetProcAddress GetProcAddressW
    
    WINBASEAPI
    FARPROC
    WINAPI
    GetProcAddressW(
        __in HMODULE hModule,
        __in LPCWSTR lpProcName
        );
    
    WINBASEAPI
    FARPROC
    WINAPI
    GetProcAddressA(
        __in HMODULE hModule,
        __in LPCSTR lpProcName
        );
    
    #else
    
    WINBASEAPI
    FARPROC
    WINAPI
    GetProcAddress(
        __in HMODULE hModule,
        __in LPCSTR lpProcName
        );
    
    #endif
    

    und in der MSDN: http://msdn.microsoft.com/en-us/library/ms885634.aspx



  • Narf ..
    Windows CE

    eine GetProcAddressA/W gibt es nur unter CE



  • So what? Ist schließlich auch WinAPI 🙂

    Und das Ganze macht es einem nicht einfacher, nativen Code zu schreiben, der auf beiden aktuellen Windows-Baureihen läuft. Das Problem wurde bei uns übrigens mit

    #pragma push_macro (TEXT)
    

    usw. gelöst.


Anmelden zum Antworten