Juste une petit précision.Pour être sur

deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 - 8 janv. 2007 à 18:59
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 - 8 janv. 2007 à 20:03
Yop à tous,

Voila je n'avai encore jamais travailer sur des chaines en Unicode jusqu'a présent et je me demandai si ce que j'avai fait était un gros coup de bol ou non . Voila je devai affecter une WCHAR avec une autre, lstrcpy n'allant évidement pas, j'ai juste fait une bête affectation avec = et cela fonctionne. Est-ce normale ?

Merci d'avance.

++
deck_bsd
___________________________________
[http://deck-bsd.eurower.net]

25 réponses

deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
8 janv. 2007 à 19:04
Oui non en faite me suis gouré c'est pas la bonne solution, il y a t il une fonction qui permet de copier une chaine unicode dans une autre?

++
deck_bsd
___________________________________
[http://deck-bsd.eurower.net]
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
8 janv. 2007 à 19:10
wcscpy()

ciao...
BruNews, MVP VC++
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
8 janv. 2007 à 19:12
lstrcpy a l'avantage d'être portable ANSI et UNICODE (lstrcpyA et lstrcpyW)
Visiblement tu compiles en mode ANSI donc ca ne t'intéresse pas

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
8 janv. 2007 à 19:19
Merci,

Mais mon problème devient plus compliquer maintenant, je doit mettre une chaine ANSI dans un membre de structure qui est un pointeur sur chaine Unicode WSPTR , mais voila je veut d'abort allouer la mémoire du pointeur unicode avec la taille de la chaine ansi avec un malloc ce qui a l'aire de ne pas fonctionner pour ensuite convertir la chaine ansi avec MultiByteToWideChar et que cette fonction mette directement le contenu dans le membre de la structure :s Seulement voila la fonction plante. Si quelqu'un à une idée .

Plus facile avec le code :

GetWindowText(hwEditName,szRecup,MAX_PATH);
uiUser.usri1_name = (LPWSTR) malloc(sizeof(MAX_PATH));
if(!MultiByteToWideChar((UINT)CP_ACP,(DWORD)MB_PRECOMPOSED,(LPSTR)szRecup,(int)-1,(LPWSTR)uiUser.usri1_name,(int)sizeof(uiUser.usri1_name))){
   MessageBox(hwDlg,"capout","ds",MB_OK);
   break;
}

++
deck_bsd
___________________________________
[http://deck-bsd.eurower.net]
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
8 janv. 2007 à 19:22
suffit d'un petit

#ifdef UNICODE
#define mycpy wcscpy
etc....

strcpy et consorts sont inline par compilo, par contre appel vers dll pour un cpy c'est perf vb à tout coup.

ciao...
BruNews, MVP VC++
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
8 janv. 2007 à 19:24
sizeof(uiUser.usri1_name) ne plait pas beaucoup...
Pourquoi caster szRecup, c'est déja un LPSTR non?

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
8 janv. 2007 à 19:24
Oui merci BruNews, mais cela ne résoud pas vraiment mon problème pour autant car je voudrait bien faire comme j'ai dit juste au dessus :s

++
deck_bsd
___________________________________
[http://deck-bsd.eurower.net]
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
8 janv. 2007 à 19:25
Il y a tout ce qu'il faut dans cet exemple:

int __stdcall CreateShortcut(char* szflSrc, char* szLink, char *szTooltip)
{
  IShellLink* psl;
  HANDLE hheap;
  WORD* pwsz;
  IPersistFile* ppf;
  int bOK;
  char *c, *d;
  if(CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,
                               IID_IShellLink, (LPVOID*) &psl)) return 0;  hheap GetProcessHeap(); bOK 0;  if((pwsz (WORD*) HeapAlloc(hheap, 0, MAX_PATH*2)) 0) goto outPsl;
  if(psl->QueryInterface(IID_IPersistFile, (LPVOID *) &ppf)) goto outHeap;
  psl->SetPath(szflSrc); psl->SetDescription(szTooltip);  d (char*) pwsz; c szflSrc;
  while(*d = *c++) d++;
  bOK = 0;
  while((*d != '\\') && (d > (char*) pwsz)) d--;
  if(d <= (char*) pwsz) goto outHeap;
  *d = 0;
  psl->SetWorkingDirectory((char*) pwsz);
  if(MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, szLink, -1, pwsz, MAX_PATH))      bOK (ppf->Save(pwsz, TRUE) 0);
  ppf->Release();
outHeap: HeapFree(hheap, 0, pwsz);
outPsl: psl->Release();
  return bOK;
}

ciao...
BruNews, MVP VC++
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
8 janv. 2007 à 19:25
OK BruNews, j'ignorais que des appels vers une DLL étaient effectués

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
8 janv. 2007 à 19:26
Oui c'est vrai, mais le sizeof a tjrs fonctionner jusque ici, j'ai l'impression que mon malloc est pour quelque chose la dedans :s

++
deck_bsd
___________________________________
[http://deck-bsd.eurower.net]
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
8 janv. 2007 à 19:29
sizeof (un pointeur) retourne toujours la même chose (4 en 32 bits)
Ca marchait avec un tableau statique

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
8 janv. 2007 à 19:34
Ce qu'on peut répéter les choses....

ciao...
BruNews, MVP VC++
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
8 janv. 2007 à 19:36
Bo je vien d'esseyer :

GetWindowText(hwEditName,szRecup,MAX_PATH);
uiUser.usri1_name = (LPWSTR) HeapAlloc(GetProcessHeap(),0,strlen(szREcup)
if(!MultiByteToWideChar((UINT)CP_ACP,(DWORD)MB_PRECOMPOSED,(LPSTR)szRecup,(int)-1,(LPWSTR)uiUser.usri1_name,(int)sizeof(szRecup))){
   MessageBox(hwDlg,"capout","ds",MB_OK);
   break;
}

Cela fonctionne mais lorsque je ferme le programme j'ai un message d'erreur disant que la mémoire ne peut être read.

++
deck_bsd
___________________________________
[http://deck-bsd.eurower.net]
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
8 janv. 2007 à 19:41
HeapAlloc() sur strlen() va manque deja 1 caracteree, le 0 final....

Allez réfléchis un peu à ce que tu fais avant de recopier à la va vite.

ciao...
BruNews, MVP VC++
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
8 janv. 2007 à 19:44
Indice: un caractère unicode est deux fois plus grand qu'un caractère ansi

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
8 janv. 2007 à 19:47
Et aussi je sais pas pourquoi tu mets des casts partout (par exemple (int)-1 ou (UINT)CP_ACP), mais je trouve que c'est pénible à lire

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
8 janv. 2007 à 19:47
mov eax, strlen
add eax, 1
shl eax, 1

voila tu sais tout

ciao...
BruNews, MVP VC++
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
8 janv. 2007 à 19:49
C'est quoi ca??

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
8 janv. 2007 à 19:50
la quantité voulue pour HeapAlloc pardi.

ciao...
BruNews, MVP VC++
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
8 janv. 2007 à 19:51
Haaaaaaa ben je le savai pas cela, mea coulpa.
C'est vrai que parfois j'ai tendance a aller vite et a réfléchir après surtout quand je trouve pas la solution après quelques temps mdr.

Que ferai-je sans vous :p lol

++
deck_bsd
___________________________________
[http://deck-bsd.eurower.net]
0
Rejoignez-nous