Salut,
Pour ta derniere question, la difference entre:
ecrire :
pret = (char*) malloc(len + 8);
et pas pret = malloc(len + 8);
Pret est un char*, et malloc retourne un void*, donc si tu essaye de compiler tu aura une erreur du genre cannot convert 'void *' to 'char *'.
Quand tu rajoutes un (char*) devant malloc tu 'convertis' le void* en char*, et donc plus aucun prob de compilation. Ca s'appelle un cast.
-------------------------------
Réponse au message :
-------------------------------
> Je l'ai supprimé pour le moment
> car aprés
> cout << var << endl;
> si je mets free(var);
>
> J'ai un plantage
> Et comme je ne veux pas abuser je me suis dis que j'allais bien trouvé un jours pourquoi.
> Alors si tu as une idée...
> Merci d'avance
>
> Pour moi aujourd'hui il y a deja une grande leçcon avec malloc que je vais étudier d'avantage.
> A noter que j'ai du mal a comprendre pourquoi
> ecrire :
> pret = (char*) malloc(len + 8);
> et pas pret = malloc(len + 8);
>
> Bonne nuit
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > ATTENTION,
> > il manque free(var);
> > ici pas trop important l'appli finit, le systeme va liberer mais sur un prog plus important tu n'arriveras pas au bout si tu ne liberes pas les blocs alloues.
> > Il faut aussi tester le retour comme je te l'avais mis, si l'alloc memoire rate et que tu ne testes pas tu vas faire badaboum.
> > BruNews, ciao...
> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > Je mets le code final en ligne fonc.
> > > avec visual C++
> > >
> > > Code du EXE > > > // exe.cpp : Defines the entry point for the console application. > > > // > > > #include <windows.h> > > > #include <stdio.h> > > > #include "stdafx.h" > > > #include <iostream.h> > > > #include <stdlib.h> > > > > > > > > > extern "C" __declspec(dllimport) char* ConcatWorld(char *B); > > > > > > int main(int argc, char* argv[]) > > > { > > > char *var = ConcatWorld("Hello "); > > > > > > cout << var << endl; > > > > > > > > > system("PAUSE"); > > > return 0; > > > } > > > __________________________________________________________ > > > Le code du dll > > > > > > // 2237.cpp : Defines the entry point for the DLL application. > > > // > > > > > > #include "stdafx.h" > > > #include <windows.h> > > > #include <stdio.h> > > > #include <conio.h> > > > #include <malloc.h> > > > #include <stdlib.h> > > > > > > BOOL APIENTRY DllMain( HANDLE hModule, > > > DWORD ul_reason_for_call, > > > LPVOID lpReserved > > > ) > > > { > > > return TRUE; > > > } > > > > > > > > > extern "C" __declspec(dllexport) char* ConcatWorld(char* psz) > > > { > > > char *pret; > > > int len = strlen(psz); > > > pret = (char*) malloc(len + 8); > > > if(!pret) return 0; > > > strcpy(pret, psz); > > > strcat(pret, "World"); > > > return pret; > > > } > > > > > > > > > > > > |
> > >
> > > Merci ça marche!!!
> > >
> > > -------------------------------
> > > Réponse au message :
> > > -------------------------------
> > >
> > > > Dans la dll:
> > > > extern "C" char* __stdcall ConcatWorld(char* psz)
> > > > {
> > > > char *pret;
> > > > int len = strlen(psz);
> > > > pret = (char*) malloc(len + 8);
> > > > if(!pret) return 0;
> > > > strcpy(pret, psz);
> > > > strcat(pret, "World");
> > > > return pret;
> > > > }
> > > >
> > > > Dans le prog, je reprends de ta source:
> > > >
> > > > extern "C" __declspec(dllimport) char* ConcatWorld(char *B);
> > > >
> > > > int main(int argc, char* argv[])
> > > > {
> > > > char *var = ConcatWorld("Hello ");
> > > > if(var) { // verif retour != 0
> > > > cout << var << endl;
> > > > free(var);
> > > > }
> > > > else cout << "DEFAUT MEMOIRE" << endl;
> > > > system("PAUSE");
> > > > return 0;
> > > > }
> > > >
> > > >
> > > > BruNews, ciao...
> > > >
> > > >
> > > > -------------------------------
> > > > Réponse au message :
> > > > -------------------------------
> > > >
> > > > > Merci
> > > > > Mais afin de préserver mon portable des coup.
> > > > > Pouvez me donner un exemple de code.
> > > > > Surtout au niveau de la gestion des pointeur.
> > > > > Merci
> > > > >
> > > > >
> > > > >
> > > > > -------------------------------
> > > > > Réponse au message :
> > > > > -------------------------------
> > > > >
> > > > > > Si la dll doit retourner un ptr de chaine faisant concat de ce qu'elle reçoit + ce qu'elle ajoute, faudra allouer la memoire dans la dll pour garantir la longueur necessaire au chainage.
> > > > > > La dll retourne un char* que le prog affiche et ensuite fait le free(ptr).
> > > > > > BruNews, ciao...
> > > > > >
> > > > > >
> > > > > > -------------------------------
> > > > > > Réponse au message :
> > > > > > -------------------------------
> > > > > >
> > > > > > > Bonjour,
> > > > > > > Je suis débutant en C++.
> > > > > > > J'essaye de trouver le moyen de faire une chose qui devrait être très simple.
> > > > > > >
> > > > > > > Avoir une application console qui envoi un texte genre « hello » dans une dll
> > > > > > > Et un retourne hello + world
> > > > > > >
> > > > > > > Qui peut me montrer un exemple complet.
> > > > > > >
> > > > > > > J'utilise Visual C++ 6 je suppose que ce n'est important au vu du simple projet.
> > > > > > >
> > > > > > > Merci encore.
> > > > > > >
> > > > > > >
> > > > > > > extern "C" __declspec(dllimport) char * FoncDLL(char * B);
> > > > > > >
> > > > > > > int main(int argc, char* argv[])
> > > > > > > {
> > > > > > > char * Var= « Hello » ;
> > > > > > >
> > > > > > > cout << FoncDLL(Var)<< endl ;// texte retourné "hello world"
> > > > > > >
> > > > > > > system("PAUSE");
> > > > > > > return 0;
> > > > > > > }
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>