GetPrivateProfileString() ParameterFehler?

Moin Moin …
ich habe da folgendes Problem:
ich möchte ein string aus einer INI datei lesen also habe ich folgenden Code:

char KundenNr[256];

GetPrivateProfileString(TEXT(„Optionen“),TEXT(„Kundennummer“),TEXT(""),KundenNr,sizeof(KundenNr),TEXT(„C:\Bla Blubb\setup.ini“));

beim compilieren gibt er mir aber diese fehlermeldung zurück:
Inkompatible Typen von ‚char [256]‘ zu ‚unsigned short *‘
Damit bezieht er sich auf die KundenNr… aber Warum???

ich hab die KundenNr schon mal zum (LPTSTR) gecastet, aber dann bekomme ich nur das erste char aus dem INI-Eintrag…

Kann mir da einer Behilflich sein ???
THX im Vorraus

Hi,
dein Problem ist folgendes:
Das WIN32-API kennt mehr als eine Art Zeichen zu kodieren

  1. Ein-Byte Kodierung
    Das ist der klassische CHAR (-> Zeichen werden gemäß ASCII codiert)
    Problem hier ist, das die hier kodierbaren 256 Zeichen zwar für den lateinischen Zeichensatz ausreichend sind, aber sobald man andere Zeichensätze codieren will (kanjii, katakana, …) ist man hier schnell mit seinem Latein am Ende!

  2. Mehr-Byte Kodierung
    Ein typischer Vertreter ist hier UNICODE (2-BYTE Kodierung -> USHORT)
    Mit dem kann man bis zu 64k Character kodieren. Das reicht heute für alle bekannten Glyphen.

Ok, du verwendest in deinem Bsp. das TEXT() Macro welches dafür sorgt, das die von die angegebenen Strings in ASCII oder in UNICODE kodiert werden!! Gesteuert wird dies über ein Preprozessor-define
UNICODE -> erzeugt 2-Byte Character
sonst -> 1-Byte Character

Damit das sinnvoll funktioniert muss die GetPrivateProfileString() Funktion natürlich auch 2 versch. Signaturen besitzen (eine für UNICODE, heisst dann intern GetPrivateProfileStringW() und eine für 1-Byte Kodierung, heisst dann intern GetPrivateProfileStringA())
Davon merkst du aber typischerweise nix, da dies die Toolkette „under-the-hood“ für dich hantiert.

So, nun zu deinem Problem:
Du hast alle String-Parameter in deinem Aufruf korrekt mittels TEXT() versehen, damit erhälst du (je nachdem ob UNICODE gesetzt ist oder nicht) die jeweils notwendige Signatur für die GetPrivateProfileString Funktion (mit char * oder ushort * parametern). Dein Parameter KundenNr ist jedoch in beiden Fällen ein char !!
D.h. wenn du den Code mit UNICODE übersetzt erwartet GetPrivateProfileString() einen Ablageplatz vom typ ushort * (da du ja UNICODE übersetzt und somit 2-Byte pro Zeichen brauchst). Deswegen meckert auch der Compiler !!

Lösung: Definiere deinen Array als TCHAR und nicht als char !!
Der TCHAR erzeugt dir (wie das TEXT()-Makro) den jeweils pasasenden Typen (also ushort bei UNICODE und char bei non-UNICODE)
Eine andere Möglichkeit wäre nicht mit UNICODE zu übersetzen sondern in der klassischen 1-Byte Codierung

have fun,
SoulCalibur

Jo…
vielen vielen Dank !!!
ich hab mich jetzt für die 1-byte methode entschieden…und unicode ausgeschaltet…
danke danke danke…