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:
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?
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
.
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.
Tags und Links c++ visual-studio-2012 visual-c++