begin process at 2012 05 29 01:34:29
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

C++ DLL retour de paramettre


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

C++ DLL retour de paramettre

samedi 30 août 2003 à 22:48:20 | C++ DLL retour de paramettre

PRZYBYLSKI

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;
}
dimanche 31 août 2003 à 11:51:00 | Re : C++ DLL retour de paramettre

BruNews

Administrateur CodeS-SourceS
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;
> }
>
dimanche 31 août 2003 à 11:59:29 | Re : C++ DLL retour de paramettre

PRZYBYLSKI

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;
> > }
> >
>
dimanche 31 août 2003 à 12:11:26 | Re : C++ DLL retour de paramettre

BruNews

Administrateur CodeS-SourceS
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;
> > > }
> > >
> >
>
dimanche 31 août 2003 à 23:17:29 | Re : C++ DLL retour de paramettre

PRZYBYLSKI

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;
> > > > }
> > > >
> > >
> >
>
dimanche 31 août 2003 à 23:28:25 | Re : C++ DLL retour de paramettre

BruNews

Administrateur CodeS-SourceS
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;
> > > > > }
> > > > >
> > > >
> > >
> >
>
lundi 1 septembre 2003 à 01:47:35 | Re : C++ DLL retour de paramettre

PRZYBYLSKI

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;
> > > > > > }
> > > > > >
> > > > >
> > > >
> > >
> >
>
lundi 1 septembre 2003 à 01:59:37 | Re : C++ DLL retour de paramettre

aardman

Membre Club
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;
> > > > > > > }
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>
lundi 1 septembre 2003 à 09:17:50 | Re : C++ DLL retour de paramettre

BruNews

Administrateur CodeS-SourceS
pret = (char*) malloc(len + 8);
et pas pret = malloc(len + 8);

Juste pour satisfaire le compilateur car pret est declare en tant que char* et rien de plus.
BruNews, ciao...


-------------------------------
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;
> > > > > > > }
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>
jeudi 4 septembre 2003 à 11:48:20 | Re : C++ DLL retour de paramettre

PRZYBYLSKI


J'ai une question bon je n'y connais rien
mais es que tu ne pense pas qu'il faut faire un free
mais dans la dll?

strcat(pret, "World");
return pret;
free(pret);
}
Merci

-------------------------------
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;
> > > > > > }
> > > > > >
> > > > >
> > > >
> > >
> >
>

1 2

Cette discussion est classée dans : dll, char, retour, hello, paramettre


Répondre à ce message

Sujets en rapport avec ce message

Pb d'utilisation d'une DLL avec VB (allocation de memoire) [ par jeralex ] Bonjour à tous,Voila mon problème : je suis chargé d'ecrire une DLL en c permettant de recuperer les tag dans un fichier mp3. Quand j'appelle les fonc strstr [ par melkiorlenecrarque ] Bonjour Je n'arrive pas à utiliser strstr(...) if( lstrcmp(BufMp3, "ID3") == 0 )    //tag v2             {           & Gestion de la mémoire [ par DMK04 ] Salut,Je me demandais un truc sur la gestion de la mémoire. Je ne vois pas trop comment l'expliquer simplement et rapidement, voici donc un peu de cod HELP! DEV-C++ et Dll [ par couriousous ] HEllo!Comment on crée une Dll que l'on peut inclure dans Visual Basic avec dev-c++??? au départ j'ai une fonction char * mafonction(char *) et je veux Convertir des strings [ par UnExPeCtEdSpy ] 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' concaténation........... [ par moloko2000 ] Lorsque je concatène une chaine de caractère avec strcat par exemple: strcat(retour_search,temp );retour_search à la valeur suivante:???????????????? hello [ par laulau10 ] bon ai une question j'ai une dll mais ai pas de fichier def au autre je voudrait l'inclure ds un de mes programme de maniere a pouvoir utiliser les fo lire dans la base de registre [ par BsEtZeOpLhD ] Salut.J'utilise VC++ et je suis sous Win XP.Voila, j'ai un problème pour lire une valeur de type REG_SZ dans la base de registre.J'utilise ce code :#i ReadFile ou autre (une proposition ajouté la) [ par youpiyoyo ] J'aurai besoin de récup ceci qui se trouve dans un .txtC:\Program Files\BSPlayer\bplay.exeje te met le .txt dans la piece jointesi possible le type de Pb de variable (enfin je croi) [ par Xilofeon ] Regardé ce code :#define PIDVALIDE "6.0.2800.1106"...<b


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,730 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales