Accueil > Forum > > > > Pointeur de fonction : multi-appels
Pointeur de fonction : multi-appels
samedi 22 janvier 2005 à 16:58:44 |
Pointeur de fonction : multi-appels

Gendal67
|
Bonjour tout le monde, Les pointeurs de fonction me posent problême!! sniff!! En fait, j'ai un pointeur de fonction pointant sur une fonction se trouvant dans une DLL! Ce pointeur fonctionne!! J'arrive à appeller la fonction...le soucis, c'est que lorsqu'avec le même pointeur j'essaie de lancer la même fonction, la fonction n'est pas executée!! Que faire dans un tel cas ??  Gendal67, Dev-C++ 4.9.9.1, J'adore cppfrance!! :-))
|
|
samedi 22 janvier 2005 à 22:21:57 |
Re : Pointeur de fonction : multi-appels

dletozeun
|
tu veux dire que la premiere fois ca marche mais la deuxieme fois que t'appelle la fonction ca marche pas?
|
|
samedi 22 janvier 2005 à 23:19:53 |
Re : Pointeur de fonction : multi-appels

Gendal67
|
Oui c'est exactement ça!! Et c'est pas la première fois que ça me le fait en fait...:s
Gendal67, Dev-C++ 4.9.9.1, J'adore cppfrance!! :-))
|
|
dimanche 23 janvier 2005 à 01:31:32 |
Re : Pointeur de fonction : multi-appels

racpp
|
Salut,
Tu n'as pas oublié la convention d'appel de la fonction? Si oui, voici un exemple d'utilisation d'un pointeur de fonction avec convention d'appel WINAPI:
typedef BOOL (WINAPI *PFonction) ( int, char);
PFonction MaFonction;
MaFonction=(PFonction)GetProcAddress(hDLL,"fonction");
Par défaut le compilateur (comme visual c) ajoute la convention "__cdecl" qui pourrait causer des plantages ou anomalies si la fonction utilise une autre convention (WINAPI = __stdcall). En général, les DLLs utilisent WINAPI.
Il est possible que ton problème viendrait de là.
|
|
dimanche 23 janvier 2005 à 10:59:04 |
Re : Pointeur de fonction : multi-appels

Gendal67
|
Eh bien c'est fort probable en effet, mais j'ai essayé avec WINAPI et cela ne donne rien de +...la fonction est URLDownloadToFile() .... il semble sur msdn qu'elle n'est pas d'étiquette (WINAPI, CALLBACK, etc...) précise....une idée ??
Gendal67, Dev-C++ 4.9.9.1, J'adore cppfrance!! :-))
|
|
dimanche 23 janvier 2005 à 11:01:19 |
Re : Pointeur de fonction : multi-appels

Gendal67
|
#define LPBINDSTATUSCALLBACK DLGPROC #define MAX_DOWNLOAD_PAGES 50
typedef HRESULT (WINAPI *DOWNLOAD) (LPUNKNOWN, LPCTSTR, LPCTSTR, DWORD, LPBINDSTATUSCALLBACK); DOWNLOAD pDown;
// instructions
bool Initialize() { hDll = LoadLibrary("urlmon.dll"); if(!hDll) return false; pDown = (DOWNLOAD) GetProcAddress(hDll, "URLDownloadToFileA"); if(!pDown) return false;
//instructions... }
Si cela peut t'aider....
Gendal67, Dev-C++ 4.9.9.1, J'adore cppfrance!! :-))
|
|
dimanche 23 janvier 2005 à 19:03:39 |
Re : Pointeur de fonction : multi-appels

racpp
|
Salut,
L'erreur est certainement ailleurs dans ton code. Toutes les fonctions des DLLs de Windows sont en WINAPI. Voici un petit exemple permettant de télécharger 3 pages l'une après l'autre de 3 sites différents:
typedef HRESULT (WINAPI *DOWNLOAD) (LPUNKNOWN, LPCTSTR, LPCTSTR, DWORD, LPBINDSTATUSCALLBACK);
HINSTANCE hDll = LoadLibrary("urlmon.dll");
DOWNLOAD pDown= (DOWNLOAD) GetProcAddress(hDll, "URLDownloadToFileA");
CoInitialize(0);
HRESULT err=pDown(0,"http://www.google.fr/index.html","c:\\google.txt",0,0);
err=pDown(0,"http://www.voila.fr/index.html","c:\\voila.txt",0,0);
err=pDown(0,"http://www.yahoo.fr/index.html","c:\\yahoo.txt",0,0);
CoUninitialize();
FreeLibrary(hDll);
Je viens de le tester, et ça marche parfaitement.
Petite remarque: si tu veux intercepter les événements de progression ou de la fin du téléchargement (etc...), le dernier paramètre de "URLDownloadToFileA" doit être un pointeur sur une interface "IBindStatusCallback" définie dans ton programme sous forme de classe. Si ça t'intéresse, je posterai ici un exemple de cette petite classe.
|
|
dimanche 23 janvier 2005 à 19:37:53 |
Re : Pointeur de fonction : multi-appels

Gendal67
|
Non pour le truc de la classe....mais ça me tue que chez moi cela ne marche pas (jamais d'ailleurs)!! Jte montre mon code, pourrais tu y trouver l'erreur ? :
#include <windows.h> #include <stdio.h>
#define LPBINDSTATUSCALLBACK DLGPROC #define MAX_DOWNLOAD_PAGES 50
typedef HRESULT (WINAPI *DOWNLOAD) (LPUNKNOWN, LPCTSTR, LPCTSTR, DWORD, LPBINDSTATUSCALLBACK);
DOWNLOAD pDown;
char szPath[MAX_PATH]; HINSTANCE hDll;
bool Initialize();
DWORD WINAPI ScanWeb(LPVOID pv) { static int nbThread = 0; if(nbThread > MAX_DOWNLOAD_PAGES) return 0L; nbThread++; char szURL[MAX_PATH]; lstrcpy(szURL, (char*) pv); char szFile[MAX_PATH]; GetName(szFile); pDown(0, szURL, szFile, 0, 0); nbThread--; return 0L; } bool Initialize() { hDll = LoadLibrary("urlmon.dll"); if(!hDll) return false; pDown = (DOWNLOAD) GetProcAddress(hDll, "URLDownloadToFileA"); if(!pDown) return false; return true; }
Gendal67, Dev-C++ 4.9.9.1, J'adore cppfrance!! :-))
|
|
lundi 24 janvier 2005 à 02:12:53 |
Re : Pointeur de fonction : multi-appels

racpp
|
Je pense que tu n'as pas bien vu les deux fonctions CoInitialize() et CoUninitialize() dans mon exemple. Désolé pour la présentation que je n'arrive plus à soigner dans cette nouvelle version du forum. Comment tu fais toi?
La fonction URLDownloadToFile() est cencée fonctionner avec les Activex et les interfaces. C'est pour cela qu'il est obligatoire d'initialiser la librairie COM avec CoInitialize() avant de l'utiliser. Voici un exemple avec ton code comme noyau. Et ça marche aussi:
[code]
#include
#include
#define LPBINDSTATUSCALLBACK DLGPROC
#define MAX_DOWNLOAD_PAGES 50
typedef HRESULT (WINAPI *DOWNLOAD) (LPUNKNOWN, LPCTSTR, LPCTSTR, DWORD, LPBINDSTATUSCALLBACK);
DOWNLOAD pDown;
char szPath[MAX_PATH];
HINSTANCE hDll;
void GetName(char *File)
{
static int compt=0;
if (compt==0) strcpy(File,"c:\\google.txt");
if (compt==1) strcpy(File,"c:\\voila.txt");
if (compt==2) strcpy(File,"c:\\yahoo.txt");
compt++;
return;
}
DWORD WINAPI ScanWeb(LPVOID pv) {
static int nbThread = 0;
if(nbThread > MAX_DOWNLOAD_PAGES) return 0L;
nbThread++;
char szURL[MAX_PATH];
lstrcpy(szURL, (char*) pv);
char szFile[MAX_PATH];
GetName(szFile);
pDown(0, szURL, szFile, 0, 0);
nbThread--;
return 0L;
}
bool Initialize() {
hDll = LoadLibrary("urlmon.dll");
if(!hDll) return false;
pDown = (DOWNLOAD) GetProcAddress(hDll, "URLDownloadToFileA");
if(!pDown) return false;
return true;
}
int main()
{
CoInitialize(0);
bool ret=Initialize();
char url[MAX_PATH];
strcpy(url,"http://www.google.com/index.html");
ScanWeb((LPVOID)url);
strcpy(url,"http://www.voila.fr/index.html");
ScanWeb((LPVOID)url);
strcpy(url,"http://www.yahoo.fr/index.html");
ScanWeb((LPVOID)url);
FreeLibrary(hDll);
CoUninitialize();
return 0;
}
[/code]
J'espère que cette fois la présentation sera meilleure.
|
|
lundi 24 janvier 2005 à 02:21:28 |
Re : Pointeur de fonction : multi-appels

racpp
|
Franchement cette nouvelle version du forum ne me plait pas du tout. Même le bouton "Ajouter" refuse souvent de répondre. J'espère que ce sera réglé très bientôt.
|
|
Cette discussion est classée dans : fonction, multi, pointeur, appels
Répondre à ce message
Sujets en rapport avec ce message
Problème de pointeur [ par sebastienbro ]
Bonjour,G une fonction ki a comme argument un pointeur vers un struct personnalisé.J'aimerais savoir commen je peu faire pour modifier lé éléments de
gestion multi utlisateur [ par marelo87 ]
bonjour,j ai deux question:- j aimerais savoir comment faire "attendre" une fonction. dans un programme le serveur doi recevoir desdonnées taper par l
Pointeur sur fonction envoyé par dll [ par MoDDiB ]
Voila ce que j'ai fais mais ca ne marche pas :Dll :#include BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved){ retu
Une fonction multi-type ? [ par TeLeTUbIz ]
Ouah !!!J'ai cherché, scruté dans tout les coins, soulevé les montagnes,... mais je ne trouve pas solution à mon problème.En fait, je voudrais faire u
question sur les pointeur et tableau et matrice [ par Battousai ]
bonjour a tous,ma question se porte comme indiqué si dessus sur l'utilisation des pointeur avec les tableau et surtout les matrices ou plus.d'abord j'
Pointeur vers une fonction dans une classe ... [ par MoDDiB ]
Supposons que j'ai la fonctionvoid Fonction(int test,int t);appartenant a la classe Cclass.Quelle est la syntaxe pour creer un pointeur vers cette fon
pb pointeurs [ par Arnaud16022 ]
bonsoirj'ai un peu de mal avec les pointeurs et ma fonction marche pas trop.Le but est de passer une variable en parametre a une fonction, qui va stoc
pointeur static sur fonction :) [ par luhtor ]
Certain reconnaitront surement le tutoriel en question. J'ai rajouté quelques trucs au gestionnaire d'exception, mais je bloque sur le point suivant:J
pointeur et handle [ par yerosnimus ]
Bonjour, bon, je suis débutant et surtout autodidacte en programmation. J'essaie de comprendre actuellement l'utilisation d'un pointeur avec une fonc
Langage C: Problème de retour de Pointeur dans une fonction [ par loic911 ]
SalutJ'aimerais bien renvoyer l'endroit d'un pointeur sur un tableau a deux dimension à une autre fonction exemple:
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|