Wie konvertiert man char * in LPCWSTR?

9

Ich weiß, dass dies bereits in mehreren Fragen zu SO diskutiert wurde, aber keine dieser Lösungen hat für mich funktioniert.

Ich beginne mit char* , weil dies für eine DLL ist, die von VBA aufgerufen wird, und char* ist notwendig, damit VBA eine Zeichenkette an die DLL übergibt.

Ich muss ein LPCWSTR zurückgeben, weil das der Eingabeparameter für die API-Funktion ist, die ich aufrufen möchte, und ich kann Casting nicht aktivieren, indem ich im Eigenschaftenfenster von Unicode auf Multi-Byte-Zeichensatz umschalte Die API hat diesen Code:

%Vor%

Ich habe es versucht:

%Vor%

was diese Fehler verursacht hat:

%Vor%

Ich habe das versucht (gleiche Funktion Header), lose von diesem Beitrag angepasst:

%Vor%

Dieses kompilierte ok, aber wenn ich es eine Beispielschnur von "xyz.xlsx", mbsrtowcs_s() setze buf zu einer leeren Zeichenkette übergab: L""

Also, wie mache ich diese Umwandlung?

    
sigil 31.10.2013, 19:35
quelle

2 Antworten

5

Da cs ein const char* ist, ist cs[1] ein const char . C ++ wird es nicht in einen Zeiger für Sie konvertieren, da dies in den meisten Fällen keinen Sinn ergibt.

Sie könnten stattdessen &cs[1] oder cs+1 sagen, wenn Sie das erste Zeichen überspringen wollen. (Das tun Sie, wenn Sie einen Zeiger auf das 1. Element übergeben; in C ++ beginnen die Indizes bei 0). Wenn die ganze Zeichenfolge übergeben werden soll, übergeben Sie einfach cs .

    
cHao 31.10.2013, 19:42
quelle
16

Nach dem Rat von Hans Passant bezüglich der Verweise auf lokale Variablen habe ich diesen Ansatz ausgearbeitet, der gut zu funktionieren scheint:

%Vor%

Ich bin mir bewusst, dass die Verwendung von new Speicherverwaltung erfordert, die ich in der Funktion, die diese aufruft, führe.

    
sigil 31.10.2013 22:50
quelle