2017-11-23 2 views
0

Ich bin Tring in eine Tabelle kyrillischen Zeichen zu schreiben, die in einer OSX App generiert wird ist:Kann passieren Wchar_t nicht LibXL WriteStr

sheet = xlBookAddSheet(book, "Output", 0); 
detailFormat = xlBookAddFormat(book, 0); 
wchar_t *w_user = (wchar_t*)malloc(max_chars * sizeof(wchar_t)); 
//get wchar_t characters... 
xlSheetWriteStr(sheet, row, column, w_user, detailFormat); 

aber die letzte Zeile wird nicht als xlSheetWriteStr kompilieren erwartet const char* anstelle von w_user.

Nach der docs sollte ich const wchar_t* übergeben können. Gibt es eine Möglichkeit, meine internationalen Charaktere in eine Zelle zu schreiben?

Antwort

1

LibXL bietet Header für die ANSI und UNICODE Versionen der Funktionen.

Programme, die bereit sind, die Unicode-Version einer API zu verwenden, sollten das Makro UNICODE definieren. Wenn Sie Visual Studio verwenden, ist es so einfach wie unter Project -> Properties -> Character Set zu gehen und es auf Use Unicode Character Set zu setzen.

Was Sie als xlSheetWriteStr sehen, ist tatsächlich ein Makro, das den Wert xlSheetWriteStrA oder xlSheetWriteStrW mit endet. Wenn UNICODE nicht definiert ist, wenn es später ist.

Die Funktion xlSheetWriteStrA ist in SheetA.h deklariert, während xlSheetWriteStrW in SheetW.h deklariert ist.

Hinweis: Es ist besser, wenn Sie konsistent sind. Wenn Sie die Unicode-Version einer Funktion verwenden, verwenden Sie die Unicode-Version aller Funktionen. Ich sage das, weil Sie in Ihrem Beispiel sehen, dass Sie die ANSI-Version von xlBookAddSheet verwenden.

Update: Für die OSX Version der Bibliothek des Makro _UNICODE, mit dem vorhergehenden Strich ist (siehe für weitere Einzelheiten libxl.h).

+0

Danke, es sieht so aus, als würde die Definition von _UNICODE die Verwendung aller Unicode-Versionen der Methoden erzwingen. – Todd

+0

Das ist genau. Wenn Sie es nicht definieren, müssen Sie zwischen der Verwendung der ANSI-Version oder dem direkten Aufruf der spezifischen Funktionen wählen (in diesem Fall 'xlSheetWriteStrW'). –