Comment passer un buffer en binaire avec avec readfile

Signaler
Messages postés
539
Date d'inscription
vendredi 6 juin 2003
Statut
Membre
Dernière intervention
14 juillet 2010
-
Messages postés
539
Date d'inscription
vendredi 6 juin 2003
Statut
Membre
Dernière intervention
14 juillet 2010
-
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

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
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++
Messages postés
539
Date d'inscription
vendredi 6 juin 2003
Statut
Membre
Dernière intervention
14 juillet 2010
1
c pas une solution simple mais je vais creuser ta réponse si j'ai un probleme je te recontact

merci
youpi :)
Messages postés
539
Date d'inscription
vendredi 6 juin 2003
Statut
Membre
Dernière intervention
14 juillet 2010
1
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 :)
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
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++
Messages postés
539
Date d'inscription
vendredi 6 juin 2003
Statut
Membre
Dernière intervention
14 juillet 2010
1
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 :)
Messages postés
539
Date d'inscription
vendredi 6 juin 2003
Statut
Membre
Dernière intervention
14 juillet 2010
1
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 :)
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
szLink est fullPathName du *.lnk.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
539
Date d'inscription
vendredi 6 juin 2003
Statut
Membre
Dernière intervention
14 juillet 2010
1
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 :)
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
Commence par afficher (MessageBox) ce qui sort de ReadFile, on ne sait jamais.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
539
Date d'inscription
vendredi 6 juin 2003
Statut
Membre
Dernière intervention
14 juillet 2010
1
(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 :)
Messages postés
539
Date d'inscription
vendredi 6 juin 2003
Statut
Membre
Dernière intervention
14 juillet 2010
1
crois tu ke se serait plus facile avec ofstream???
ou un open(...

???
youpi :)
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
je ne pratique pas l'abstraction, api direct c'est plus rapide.

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

merci tout de meme
youpi :)
Messages postés
539
Date d'inscription
vendredi 6 juin 2003
Statut
Membre
Dernière intervention
14 juillet 2010
1
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 :)