GetPrivateProfileString



  • Hey Leute... 🙂

    Zuerst mal, ich bin neu im Forum & hab mich auch schon sehr oft und lange hier durchgesucht...
    Alelrdings noch nicht die Hilfestellung gefunden, die mir weiter hilft, von daher dachte ich mal, ich poste mal meine Frage 😉

    So~
    Wie man am Betreff erkennen kann, hab ich ein kleines Profil mit GetPrivateProfileString...

    Ich versuche aus einer ini-Datei auszulesen und reinzuschreiben...
    Gut, aber egal was ich versuche, es klappt einfach nicht <<

    Ich hatte auch dazu schon mal ein Programm von einer Seite verwendet, was mir aber Fehler aus gibt... Leider... http://www.tsql.de/c_plus_plus/cpp_ini_lesen.php

    Ein anderes Bsp war

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

    So in er Art soll das ganze auch bei mir aus sehn...

    Aber wie gesagt, ich komm damit nicht klar.
    Ist das erste mal, das ich mit sowas zu tun habe.

    Ich hoffe, ihr wisst nen Rat für mich, wie ich das erfüllen könnte... 😕

    Grüße :p



  • Was heißt "Es geht nicht"? Fehlermeldung? Was passiert?



  • Hattest du dir die Seite da mal angesehn?
    Also, wenn ich es genauso probiere, dann kommt folgende Fehlermeldung:

    error C2664: 'GetPrivateProfileStringW' : cannot convert parameter 1 from 'const char [5]' to 'LPCWSTR'

    Allerdings hab ich jetzt mal nachgefragt, mit LPCWSTR soll ich nicht arbeiten... Daher komm ich momentan gar nicht weiter...

    Aber cool, das hier so schnell reagiert wird 👍



  • Hättest mal die Forensuche nutzen sollen, genau das Problem hatten wir diese Woche erst 😉

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-232879-and-highlight-is-.html



  • Da war ich auch schon gelandet 😉
    Und auf einigen anderen Seiten... Seid gestern versuch ich nichts anderes, als das hin zu bekommen....
    Da das sehr wichtig ist.

    Aber irgendwie funktionierte das auch nicht so wirklich... <<
    Sonst hätte ich erst gar nicht gepostet, den mir ist schon klar, das man sich vorher durchs Formumsuchen sollte 😃



  • Dann zeig doch mal deinen Code, den du schon geschrieben hast..



  • 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


Anmelden zum Antworten