begin process at 2012 05 29 13:50:15
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Pointeurs fonctions de types inconnus


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

Pointeurs fonctions de types inconnus

mardi 16 août 2005 à 14:57:55 | Pointeurs fonctions de types inconnus

Galmiza

Bien le bonjour,

J`aimerai recuperer des pointeurs vers des fonctions dont je ne connais pas le type a l`avance.

Ex:

DWORD FonctionAlacon(char* pStr)
{
  return  strlen(pStr) - strlen(pStr);  // alors ca pour une fonction a la con, ... !
}

int main(void)
{
 void*  pointeurFunction;
 pointeurFunction = FonctionAlacon;

 return 0;
}

Ca ne compile pas car il faut preciser les arguments et parametres. Mais je n`peux pas car je ne connais pas les fonctions a l`avance.

Comment resoudre ce probleme ?

Je vous remercie.

mardi 16 août 2005 à 15:20:19 | Re : Pointeurs fonctions de types inconnus

racpp

Administrateur CodeS-SourceS
Bonjour,
Sans documentation sur cette fonction, il est difficile de trouver son type de pointeur. Avec beaucoup de chance, tu y arriveras en faisant des tests avec différents paramètres. Les plantages sont assurés quand ce ne sont pas les bons. Plus le nombre de paramètres augmente et plus les chances diminuent. Il faut penser aussi à la convention d'appel.
Bonne chance quand-même.


mardi 16 août 2005 à 15:21:32 | Re : Pointeurs fonctions de types inconnus

steve_clamage

Un pointeur généric ne peut pas contenir l'adresse d'une fonction, seulement d'un objet. Tu peux passer par une structure par exemple.


DWORD FonctionAlacon(char* pStr)
{
  return  strlen(pStr) - strlen(pStr);
}

struct s_Fonction{
DWORD (*FonctionAlacon)(char* pStr)
}f = {FonctionAlacon };

int main(void)
{
 void*  pointeurFunction;
 pointeurFunction = &f;

 ((struct s_Fonction *)f)->FonctionAlacon...
 return 0;
}

mardi 16 août 2005 à 15:26:43 | Re : Pointeurs fonctions de types inconnus

neodelphi

Membre Club
Essaye de forcer le compilo à convertir ta fonction lorsque tu veut récuperer son pointeur dans pointeurFonction:

void* pointeurFonction;
pointeurFonction = (void*)fonctionAlacon;


Je suis pas sur que ça marche sur les fonctions mais essaye quand même

neodelphi
mardi 16 août 2005 à 15:35:52 | Re : Pointeurs fonctions de types inconnus

BruNews

Administrateur CodeS-SourceS

Comme dit racpp, le seul prob ce sont les params (nbr et type) sinon:

pfunc = GetProcAddress(hdll, "nomFunc);

quand appel, si 3 params par exemple:

__ asm {
  push  param3
  push  param2
  push  param1
  call  pfunc
}

et on se soucie plus des contorsions de cast du C.

ciao...
BruNews, MVP VC++

mardi 16 août 2005 à 15:37:12 | Re : Pointeurs fonctions de types inconnus

BruNews

Administrateur CodeS-SourceS
et prévoir remontée de ESP si func non stdcall.

ciao...
BruNews, MVP VC++
mardi 16 août 2005 à 15:40:18 | Re : Pointeurs fonctions de types inconnus

steve_clamage

C'est marrant, il me semblais qu'on ne pouvais affecter l'adresse d'une fonction à un pointeur générique, j'aurais revé ?
mardi 16 août 2005 à 16:06:04 | Re : Pointeurs fonctions de types inconnus

steve_clamage

J'ai pas revé, le standard l'interdit.
mardi 16 août 2005 à 16:45:59 | Re : Pointeurs fonctions de types inconnus

racpp

Administrateur CodeS-SourceS
On peut définir un type de pointeur de fonction comme ceci:
typedef  BOOL (*PFonction)(int);
On définit ici un pointeur d'une fonction qui renvoie un BOOL et reçoit un int comme paramètre.
Pour déclarer notre pointeur on  fait:
PFonction pf;
Pour lui affecter l'adresse d'une fonction on fait:
pf = (PFonction) NotreFonction;
Ainsi, on peut remplacer NotreFonction par pf dans le programme.
Dans cet exemple, la convention d'appel  n'est pas précisée. Dans ce cas le compilateur utilise la convention par défaut : __cdecl. Pour la préciser dans la définition du type de pointeur on fait par exemple:
typedef  BOOL (__stdcall *PFonction)(int);

mardi 16 août 2005 à 17:35:03 | Re : Pointeurs fonctions de types inconnus

Galmiza

Merci a tous !

Je vais donc definir un type commun a toutes les fonctions (que je dois modifier):

typedef  void (__stdcall *VOID_FUNC)(void*);

A coup de memcopy, ca devrait aller pour renvoyer et recevoir n`importe quel type d`argument .

Ex:

void func1(void* pData)
{
  BYTE *b = (BYTE*)pData;
  float f1 = 0.7f;
  float f2 = 0.9f;
  float f3 = 7.4f;
  memcpy(b, &f1, sizeof(float));  b+=sizeof(float);
  memcpy(b, &f2, sizeof(float));  b+=sizeof(float);
  memcpy(b, &f3, sizeof(float));  b+=sizeof(float);
}

VOID_FUNC pf;
BYTE byte[3*sizeof(float)];
pf = func1;

pf(byte);

Merci encore.

1 2 3

Cette discussion est classée dans : fonctions, types, pointeurs, pstr, inconnus


Répondre à ce message

Sujets en rapport avec ce message

pointeurs et fonctions [ par alfred289 ] tableau de pointeurs de fonctions [ par trapic ] Bonjour,     J'aimerais réaliser une procédure appelant une liste de fonctions variables à argument variables. Exemple: //Le tableau des fonctions e Pointeurs sur fonction entre class [ par zeGouky ] Bonjour,voilà j'ai un petit soucis avec les pointeurs de fonctions, je m'explique j'ai une class A et une class B tel que :class A {     int  mafuncti Pointeurs et changement de types louches [ par benlustr ] Bonjour à tous. J'ai un problème bizarre : Je dois récupérer une image en niveaux de gris (0-255) en mémoire. Or, cette image est créée par une carte Utilisation des fonctions [ par darkwhite ] Salut  a tous. Je viens juste de decouvrir le C et j'essaie d'ecrire un programme utilisant2 fonctions : pour utiliser le th de pythagore mon code  ee Problème d'afficher avec des listes chainées de pointeurs [ par floralastar03 ] BonjourJe travaille sur un programme qui met en oeuvre des classes d'objets avec des classes héritées et j'ai voulu intégrer des listes chainées de po liste chainée de pointeurs [ par floralastar03 ] BonjourC'EST SUPER URGENT SVPJe travaille sur un programme qui met en oeuvre des classes d'objets avec des classes héritées et j'ai voulu intégrer des Problème de déclaration de fonction de picking [ par nisaloncaje ] Bonjour, dans mon programme je voulais faire du picking mais j'ia le problème suivant : je comptais mettre toutes les fonctions de picking dasn un fic Librairie Statistique C++ ? [ par apache38 ] Bonjour a tous,J'aimerais developper un petit programme de calcul statisque (moyenne, ecart type, Cpk ...etc rien de bien complique) avec affichage gr [C++] pb au niveau d'un .lib [ par Famidoo ] Bonjour, je souhaite générer une DLL.Pour cela ma DLL nécessite un certain nombre de fonctions présentent dans 3 .lib différentes que j'ai créé. Ainsi


Nos sponsors


Sondage...

Comparez les prix

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 : 0,515 sec (3)

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