Convertir des strings

UnExPeCtEdSpy Messages postés 139 Date d'inscription mercredi 7 août 2002 Statut Membre Dernière intervention 3 juillet 2003 - 8 mai 2003 à 19:29
UnExPeCtEdSpy Messages postés 139 Date d'inscription mercredi 7 août 2002 Statut Membre Dernière intervention 3 juillet 2003 - 8 mai 2003 à 20:56
Bonjour,

Présentation du pb:
Je ne suis plus trop familier du c++ mais j'ai du m'y remettre pour utiliser un bout de code en tant que DLL au service d'un de mais progs en VB. Je doit récupérer de la part de la DLL un nom de fichier et sa taille (voir plusieurs fichier par la suite) donc une chaine de caractére et un int.

Coté dll :
...
void __stdcall MaFonction(char* filename, int& taille)
...

Coté vb:
...
Public Declare Sub MaFonction Lib "madll.dll" _
(ByVal filename As String, ByRef taille As Integer)
...
LE PROBLEME :
Le code c++ de MaFonction utilise une variable
de type wstring qui contient le nom du fichier que je doit faire passer en parametre mais lorsque j'essaye de copier la variable wstring vers la variable en char * ça marche pas, il me dit peus pas convertir unsigned short * to char *.
je suis pourtant obligé de garder la variable en wstring telle qu'elle est et de garder le parametre en type char * pour pouvoir le transferer sous vb , Donc je doit convertir :

j'ai essayer :
sprintf( filename, "%s", name.c_str( ) ); //marche po
wprintf( filename, "%s", name.c_str( ) ); //marche po
name.copy(filename, 0, name.size()); //marche po

En fait là j'ai besoin d'un coup de main
Merci d'avances
UnExPEcTeD SpY :)

,.~*`'^~.(^. :question) .^),.~^'`*~.

3 réponses

UnExPeCtEdSpy Messages postés 139 Date d'inscription mercredi 7 août 2002 Statut Membre Dernière intervention 3 juillet 2003
8 mai 2003 à 19:40
Bon j'suis dégouté là...

C'est l'histoire d'un mec qui cherche pendant tout un aprés midi a résoudre un truc qui lui pose probléme, qui va sur le net, qui fouille la msdn, qui s'prend la tête a un point qu'il se dit allez hop j'met un message sur le forum de Nix!
Et puis le mec il tente un dernier truc avant de shutter le pc, pis paf c'est la réponse !! :)

Bon alors comme j'viens d'la poster cette question pis que j'viens d'men sortir, j'vais mettre ma solution pour ceux que ça peut interesser :

wcstombs (filename, name.c_str( ), name.size());

L'info du net :

size_t wcstombs (char *string, const wchar_t *wstring, size_t size)
The wcstombs ("wide character string to multibyte string") function converts the null-terminated wide character array wstring into a string containing multibyte characters, storing not more than size bytes starting at string, followed by a terminating null character if there is room. The conversion of characters begins in the initial shift state.

A bientot
UnExPeCtEd SpY :blush)
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
8 mai 2003 à 20:17
Le truc est de savoir pourquoi tu as enregistre en tant que wstring ? alors que tu recevais bien du char* ?
BruNews, ciao...
0
UnExPeCtEdSpy Messages postés 139 Date d'inscription mercredi 7 août 2002 Statut Membre Dernière intervention 3 juillet 2003
8 mai 2003 à 20:56
Salut,
En fait la wstring était une variable interne a la Dll qu'il me fallais récupérer en vb, comme je ne sais que récupérer des char * en vb via un string, je devais faire la conversion.

Un bref résumé codique...

void __stdcall MaFonction( BYTE* pBuf, DWORD read, char* Nom)
{
[...]
//imposé en interne
wstring name;
name.append( pStreamId->cStreamName, pStreamId->dwStreamNameSize/sizeof(WCHAR ));
//crée pour pouvoir la sortir en char *
wcstombs (Nom,name.c_str( ), name.size());
[...]
}

A+
SpY

,.~*`'^~.(^. :question) .^),.~^'`*~.
0
Rejoignez-nous