Comment passer un buffer en binaire avec avec readfile

youpiyoyo Messages postés 539 Date d'inscription vendredi 6 juin 2003 Statut Membre Dernière intervention 14 juillet 2010 - 28 juil. 2004 à 16:59
youpiyoyo Messages postés 539 Date d'inscription vendredi 6 juin 2003 Statut Membre Dernière intervention 14 juillet 2010 - 29 juil. 2004 à 20:50
bon j'ai besoin ke mon buffer lu par readfile soit en binaire et unicode

donc j'ai essayé ca

if (ReadFile(hFile, lpBuffer, dwFileSize, &dwBytesRead, NULL) != FALSE)
{
int Size = MultiByteToWideChar (CP_ACP, 0, lpBuffer, -1, NULL, 0) ;

LPWSTR wUnicode = new WCHAR[Size];
MultiByteToWideChar (CP_ACP, 0, lpBuffer, -1, wUnicode,Size) ;

}

dans ce if il fodrai ke je passe le buffer en bianire je sais pas comment faire

une idée??? n'hésité pas ecrivez

youpi :)

14 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
28 juil. 2004 à 17:11
Ce qui suit cree un raccourci, pioche dedans, il y a tout ce dont tu as besoin.

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, Admin CS, MVP Visual C++
0
youpiyoyo Messages postés 539 Date d'inscription vendredi 6 juin 2003 Statut Membre Dernière intervention 14 juillet 2010
29 juil. 2004 à 11:24
c pas une solution simple mais je vais creuser ta réponse si j'ai un probleme je te recontact

merci
youpi :)
0
youpiyoyo Messages postés 539 Date d'inscription vendredi 6 juin 2003 Statut Membre Dernière intervention 14 juillet 2010
29 juil. 2004 à 11:42
bon pour le MultiByteToWideChar c ok je comprend ke ca passe pwsz en unicode à partir de szLink.

mais ce ke je comprend pas c ton travail surd (char*) pwsz; c szflSrc;
while(*d = *c++) d++;
bOK = 0;
while((*d != '\\') && (d > (char*) pwsz)) d--;
if(d <= (char*) pwsz) goto outHeap;
*d = 0;

de ce ke je comprend c un genre d'allocation pour ton SetWorkingDirectory((char*) pwsz);

enfin je suis pas sur

il y a moyen ke tu passes 30 seconde a m'expliké un peu ton bout de code!!

et je comprend pas bien ou ca passe ton szflSrc en binaire?

merci d'avance

youpi :)
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
29 juil. 2004 à 11:51
Cesse de repeter 'en binaire', tout est binaire.

while((*d != '\\') && (d > (char*) pwsz)) d--;
recherche pointeur sur le dernier '\\' pour n'obtenir que le path.

ici:
if(MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, szLink, -1, pwsz, MAX_PATH))...
szLink est a terminateur NULL (chaine C normale).

ciao...
BruNews, Admin CS, MVP Visual C++
0

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

Posez votre question
youpiyoyo Messages postés 539 Date d'inscription vendredi 6 juin 2003 Statut Membre Dernière intervention 14 juillet 2010
29 juil. 2004 à 12:20
a ok

parceke le buffer du readfile je voulais le mettre dans le LPVOID du updateresource, et il est précisé ke le LPVOID doit etre un raw binary data et doit etre unicode, et vu ke readfile, le buffer tu me di ke c deja en binaire???

je comprend po pourkoi mon

int Size = MultiByteToWideChar (CP_ACP, 0, lpBuffer, -1, NULL, 0) ;

LPWSTR wUnicode = new WCHAR[Size];
MultiByteToWideChar (CP_ACP, 0, lpBuffer, -1, wUnicode,Size) ;
ne marche pas

les données ki sont dans les ressources ke j'ai rajouté sont inexploitable....

tu dois avoir raison je vais creusé et essayé d'utilisé le MultiByteToWideChar a ta facon...

merci, et si tu as des suggestionsn'hésite pas a me les donnés
youpi :)
0
youpiyoyo Messages postés 539 Date d'inscription vendredi 6 juin 2003 Statut Membre Dernière intervention 14 juillet 2010
29 juil. 2004 à 16:30
juste derniere question a koi correspond szLink??? le chemin ou l'on veut ke le raccourci soit genre c:\temp\lien.lnk???

ou il fo ke je remplace mon mon buffer du readfile??? szTooltip?

merci encore
youpi :)
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
29 juil. 2004 à 16:41
szLink est fullPathName du *.lnk.

ciao...
BruNews, Admin CS, MVP Visual C++
0
youpiyoyo Messages postés 539 Date d'inscription vendredi 6 juin 2003 Statut Membre Dernière intervention 14 juillet 2010
29 juil. 2004 à 16:45
bon j'essaye ca:

if (ReadFile(hFile, lpBuffer, dwFileSize, &dwBytesRead, NULL) != FALSE)
{

HANDLE hheap;
char* szflSrc;

szflSrc=szFile;

int bOK;
char *c, *d;
hheap = GetProcessHeap();
bOK = 0;
pwsz = (WORD*) HeapAlloc(hheap, 0, MAX_PATH*2);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;

MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED, lpBuffer, -1, pwsz, MAX_PATH);

char shgjk[10];
int taillle=wcslen(pwsz);
_itoa(taillle,shgjk,10);
MessageBox(0,shgjk,0,0);
//MessageBox(0,(char *)pwsz,0,0);

/* outHeap:*/ HeapFree(hheap, 0, pwsz);

sans succes pwsz ne contient ke des fioriture
youpi :)
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
29 juil. 2004 à 16:55
Commence par afficher (MessageBox) ce qui sort de ReadFile, on ne sait jamais.

ciao...
BruNews, Admin CS, MVP Visual C++
0
youpiyoyo Messages postés 539 Date d'inscription vendredi 6 juin 2003 Statut Membre Dernière intervention 14 juillet 2010
29 juil. 2004 à 17:06
(MessageBox) ce qui sort de ReadFile, il sort rien du tout de plus

avec ca :

char shgjk[10];
taillle=strlen(lpBuffer);
_itoa(taillle,shgjk,10);
MessageBox(0,shgjk,0,0);

shgjk=0

en revanche je sais k'il est pas null car je met lpBuffer dans updateresource...

j'ai creer une fonction ki permet de lire les ressources, et avec un bouton extract
dans cette fonction je fais

lpBuffer = (LPBYTE) LockResource(hResourceLoaded);

et un peu plus loin je fais
WriteFile(hFile, lpBuffer, dwFileSize, &dwBytesWritten, NULL);

et le resultat est bon.... le fichier ne change pas.

mon probleme c ke, ce ki est mi dans les ressources est inexploitable, je test les ressource avec res hacker ou resource tuner c pareil ca ne me l'affiche pas.

donc c ke le format n'est pas bon car si je l'extrait avec mon writefile ca marche!!!

solution?
youpi :)
0
youpiyoyo Messages postés 539 Date d'inscription vendredi 6 juin 2003 Statut Membre Dernière intervention 14 juillet 2010
29 juil. 2004 à 18:22
crois tu ke se serait plus facile avec ofstream???
ou un open(...

???
youpi :)
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
29 juil. 2004 à 18:26
je ne pratique pas l'abstraction, api direct c'est plus rapide.

ciao...
BruNews, Admin CS, MVP Visual C++
0
youpiyoyo Messages postés 539 Date d'inscription vendredi 6 juin 2003 Statut Membre Dernière intervention 14 juillet 2010
29 juil. 2004 à 18:29
ecoute alors je cherche toujours mais je galère....

merci tout de meme
youpi :)
0
youpiyoyo Messages postés 539 Date d'inscription vendredi 6 juin 2003 Statut Membre Dernière intervention 14 juillet 2010
29 juil. 2004 à 20:50
bon j'y suis arriver mais en faite le pourkoi il afficher pas l'icone dans la ressource c k'il y avait le header ki donne les infos de l'ico k'il ne fo pas mettre (genre 16x16) etc....
youpi :)
0
Rejoignez-nous