Hi,
dein Problem ist folgendes:
Das WIN32-API kennt mehr als eine Art Zeichen zu kodieren
-
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!
-
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