Comment convertir char * en LPCWSTR?

Je sais que cela a déjà été discuté à plusieurs questions, mais aucune de ces solutions ont travaillé pour moi.

Je commence avec un char* parce que c'est une DLL qui va être appelé à partir de VBA, et char* est nécessaire pour VBA pour passer d'une chaîne à la DLL.

J'ai besoin de revenir un LPCWSTR parce que c'est le paramètre d'entrée pour la fonction de l'API, je suis en train de l'appeler, et je ne peux pas activer la coulée par le passage de l'Unicode pour les caractères multi-octets définir dans la fenêtre Propriétés, parce que l'API a ce code:

#if !defined(UNICODE) && !defined(NOUNICODE)
#error UNICODE is not defined. UNICODE must be defined for correct API arguments.
#endif

J'ai essayé ceci:

LPCWSTR convertCharArrayToLPCWSTR(char* charArray)
    {
        const char* cs=charArray;
        wchar_t filename[4096] = {0};
        MultiByteToWideChar(0, 0, cs[1], strlen(cs[1]), filename, strlen(cs[1]));
    }

qui a donné à ces erreurs:

error C2664: 'strlen' : cannot convert parameter 1 from 'const char' to 'const char *'
error C2664: 'MultiByteToWideChar' : cannot convert parameter 3 from 'const char' to 'LPCCH'

J'ai essayé ceci (même en-tête de fonction), librement adapté de ce post:

size_t retVal;
const char * cs = charArray;    
size_t length=strlen(cs);
wchar_t * buf = new wchar_t[length]();  //value-initialize to 0 (see below)
size_t wn = mbsrtowcs_s(&retVal,buf,20, &cs, length + 1, NULL);
return buf;

Ce compilé ok, mais quand j'en ai donné un exemple de chaîne de "xyz.xlsx", mbsrtowcs_s() ensemble buf à une chaîne vide: L""

Alors, comment puis-je faire cette conversion?

source d'informationauteur sigil