begin process at 2012 05 29 22:45:48
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

Réseau & Internet

 > 

Probleme d'utilisation de DownloadToFile dans une DLL.


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

Probleme d'utilisation de DownloadToFile dans une DLL.

lundi 20 avril 2009 à 14:03:43 | Probleme d'utilisation de DownloadToFile dans une DLL.

xela138

Membre Club
Bonjour à tous et merci à ceux qui pouront m'éclairer sur mon problème.
Mon client est un projet universitaire(il est sensé faire une mise à jour automatique et silencieuse d'ou la DLL)...sont role est d'interpréter un ordre sur une page web et de l'executer. Le projet tourne en version EXE sans AUCUN problèmes, j'ai récemment eu l'envie de le mettre sous forme de DLL mais je n'ai aucun bessoin de faire appel à ses fonctions par un programme extérieur donc je n'ai pas mis de .def je n'ai pas d'éclaré mes fonctions avec un extern "C" __cdecl void mafunc(){...}, je fais juste un apel à ma fonction d'initialisation au moment du chargement de la DLL avec:
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
    init();   // ma fonction....
    break;
................
................
Tous se passe correctement, les MessageBox() sont affichés, je peut utiliser le registre, les socket marches.....
Maintenant le problème :)
--------> Au moment d'utiliser la fonction de l'API win32 DownloadToFile, la DLL se fige et ne fait plus rien.....Gros problème quand meme....
J'ai essayé avec les symbolles, sans les symbolles, j'ai essayé avec URLDownloadToFile(), on dirait que la DLL ne peut pas se servir de HRESULT ou HINSTANCE, je compile en "use MFC instatic lib", je n'ai jamais eu ce genre de problemes avant....Sa fait deja plus de 72h que je cherche le probleme, mais personne n'est capable de me répondre, le projet compile sans erreur juste quelques warnings....

J'ai inclus sa :
#include "stdafx.h"
#include <urlmon.h>
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <wininet.h>
#include <winsock2.h>
#pragma comment(lib,"Urlmon.lib")
#pragma comment(lib,"ole32.lib")
#pragma comment(lib,"kernel32.lib")
#pragma comment(lib,"user32.lib")
#pragma comment(lib,"advapi32.lib")
#pragma comment(lib,"shell32.lib")
#pragma comment(lib,"wininet.lib")
#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "gdi32.lib")

Ma fonction de download (j'ai meme foutu les symboles, pas moyen d'utiliser l'API) :

HRESULT xURLDownloadToFile(char *szURL, char *szFileName)
{
   HMODULE urlmon_dll;
   HRESULT hRet;
   typedef HRESULT (__stdcall *UDTF)(DWORD, LPCSTR, LPCSTR, DWORD, DWORD);
   UDTF fURLDownloadToFile;
   urlmon_dll = LoadLibrary("urlmon.dll");
   fURLDownloadToFile = (UDTF)GetProcAddress(urlmon_dll, "URLDownloadToFileA")
   hRet = fURLDownloadToFile(0, szURL, szFileName, 0, 0);
   FreeLibrary(urlmon_dll);
   return hRet;
}

Et je l'apelle comme sa :

int traitement(char * recvbuf)
{
...........etc..........
xURLDownloadToFile("http://www.videolan.org/mirror-geo.php?file=vlc/0.9.9/win32/vlc-0.9.9-win32.exe", sTemp);
.........etc.......
}

Et tous se fige pile au moment ou j'appel xURLDownloadToFile()
Le problème vient à priori des HRESULT et HINSTANCE, mais je ne voit pas comment les déclarer différements.
Je suis perdu help me !!!!
J'espere que brunews pourra apporter sa contribution héhé car je pense qu'il est l'homme de la situation(MVP).
lundi 20 avril 2009 à 14:20:23 | Re : Probleme d'utilisation de DownloadToFile dans une DLL.

BruNews

Administrateur CodeS-SourceS
On ne fait pas de longs traitements dans DLL_PROCESS_ATTACH, c'est juste l'endroit de qlqs initialisations rapides mais pas plus.

ciao...
BruNews, MVP VC++
lundi 20 avril 2009 à 14:31:38 | Re : Probleme d'utilisation de DownloadToFile dans une DLL.

xela138

Membre Club
Tous d'abord merci pour ta rapidité^^.
Mais alors comment faire pour utiliser cette API dans la DLL sans programme externe...Si MessageBox() passe, le reste devrait passer sans problème vu que c'est un PE. Et qu'est ce qui limite DLL_PROCESS_ATTACH.
Désolé sa fait que deux jours que j'utilise les DLL....et meme dans les nombreux tutos que j'ai lu ce n'ai pas définit clairement vus que la DLL ne sert pas à sa.
lundi 20 avril 2009 à 14:42:46 | Re : Probleme d'utilisation de DownloadToFile dans une DLL.

xela138

Membre Club
En gros la question c'est : Doit-je réecrire DownloadToFile moi meme pour que sa marche?... Aparement toutes les manipulations standard marchent meme à travers de nombreuses fonctions et sans problèmes.
lundi 20 avril 2009 à 19:19:15 | Re : Probleme d'utilisation de DownloadToFile dans une DLL.

rt15

Membre Club Administrateur CodeS-SourceS
Salut,

[quote=msdn]
The entry-point function should perform only simple initialization or termination tasks. It must not call the LoadLibrary or LoadLibraryEx function (or a function that calls these functions), because this may create dependency loops in the DLL load order. This can result in a DLL being used before the system has executed its initialization code.
[/quote]

Te lier statiquement à urlmon peut régler le problème, via un .lib (Tu peux te faire ton .lib)... Mais bon exporter une bête fonction serait certainement beaucoup plus propre et moins risqué.
lundi 20 avril 2009 à 19:37:23 | Re : Probleme d'utilisation de DownloadToFile dans une DLL.

xela138

Membre Club
Oui j'ai remarqué que chargé une DLL depuis une autre DLL été pas trés malin, du coup j'ai fait un loader qui charge les DLLs nécéssaires au préalable. Cependant le probleme reste entier, j'ai fait apel à un viel ami à moi qui a une grande expérience en la matière, il a débugué le soft et n'a trouvé aucune erreurs, il a qualifié sa de "strange",....!@##!? l'API windows ne renvoi rien sur HRESULT. Je suis actuellement en train de coder une fonction de substitution pour DownloadToFileA. Si quelqu'un sait comment faire pour utiliser sa dans une DLL je suis preneur!!!
PS: je n'exporte pas de fonction donc il me semble difficile de lié mon .lib à urlmon.dll
je pense pouvoir faire que sa #pragma comment(lib,"Urlmon.lib").
Et encore merci pour la rapidité et la qualité des réponses :)

lundi 20 avril 2009 à 19:50:50 | Re : Probleme d'utilisation de DownloadToFile dans une DLL.

Azer33

Tu peux essayer de demander chez les réseaux pros (les vrais),  BBS et Usenet (Win32, winapi)
(rappel : le programme MVP n'a rien à voir avec un quelconque professionnalisme,
puisque le but est de réduire le budget support technique en ramassant un maximum de newbies :
aucun des 7 experts Win32 français n'est MVP par exemple...)
(étant MVP moi-même, j'ai vite compris...)
lundi 20 avril 2009 à 20:08:39 | Re : Probleme d'utilisation de DownloadToFile dans une DLL.

xela138

Membre Club
Ok merci je vais aller faire un tour de ce coté, et continuer mon downloader, car je pense qu'il n'y as pas de sollution as ce problème. Si quelqu'un est intéressé je peut lui envoyer le project^^ mais faudrait t'il encore savoir quelles sont les limitations de la DLL. (On ne fait pas de longs traitements dans DLL_PROCESS_ATTACH, c'est juste l'endroit de qlqs initialisations rapides mais pas plus.)
lundi 20 avril 2009 à 21:58:09 | Re : Probleme d'utilisation de DownloadToFile dans une DLL.

BruNews

Administrateur CodeS-SourceS
Réponse acceptée !

Inutile d'aller chercher ailleurs, la raison précise a bien été indiquée par rt15:
Pas de loadLibrary ni FreeLibrary depuis DLL_PROCESS_ATTACH sinon réentrance de code donc boucle sans fin.

Il faut exporter ta fonction ou te lier en static à urlmon, exporter serait le mieux.
J'insiste malgré tout sur le fait que DLL_PROCESS_ATTACH n'est pas du tout le moment de longs traitements tels que téléchargement de fichiers car ça devrait se faire dans un thread.

Azer33:
Il est clair qu'un MVP n'a pas science infuse sur tous produits MS.
Mon cas:
- Je n'utilise quasi rien de VC++ hors l'éditeur et bouton compiler.
- Je me sers de très peu de fonctions Win32 (je ne fais pas d'interfaces graphiques dans mon taf).
- Je ne fais jamais de C++ (C et ASM only).
C'est connu depuis des années de la direction du prog MVP et je suis pourtant MVP VC++, simplement parce que c'est la categ la plus voisine de ce que je fais.
Par contre comme newbie t'ira chercher ailleurs, suis dispo pour te filer cahier des charges d'un calculateur statistique et on comparera les perfs.
Tu es dans quelle catégorie avec quel ID MVP ???
Je te signale aussi que les NON réponses sur le forum ont fini par me burner, telles celles de jeffy131 (surement un autre de tes pseudos). Les comptes CS ne faisant que cela sont dorénavant supprimés. Soit on vient aider, soit on passe son chemin.

ciao...
BruNews, MVP VC++

lundi 20 avril 2009 à 22:13:27 | Re : Probleme d'utilisation de DownloadToFile dans une DLL.

BruNews

Administrateur CodeS-SourceS

et aussi Azer33:
je prends le temps de faire des tests pour voir ce qui se passe:
http://brunews.com/tstDownl.zip
Si on recompile la DLL en décommentant la ligne:
call    Download
on peut monitorer la récursion du code.

Répéter toujours 'aller voir newsgroup trucbidule et autre usenet' n'apporte rien, c'est de la pollution.

ciao...
BruNews, MVP VC++


1 2

Cette discussion est classée dans : dll, include, lib, urlmon, pragma


Répondre à ce message

Sujets en rapport avec ce message

Problème d'installation OpenGL avec visual c++ [ par Turok ] Salut, Alors voila je souhaite utiliser openGL avec visual C++ mais sa ne marche pas. Pourtant j'ai bien mis les fichier "gl.h" et glu.h" dans le repe Fichier .LIB [ par norton ] Bonjour,J'ai écrit une Dll mais pour que elle fonctionne je dois inclure le fichier ".lib" dans l'executable. Le problème c'est que quand je compile m [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 dll,dll, quand on t'as pas ??? [ par RV2931 ] bonjour,j'ai fais un prog qui utilise WS2_32.dll, pour les socket sous windows, c un genre de chat...c'est bien WSA pour faire du réseau, mais je me s Créer une dll à partir d'un .h et du lib correspondant [ par z_san ] Bonjour à tous, Voilà dans le cadre d'uen grosse application, je dois utiliser un .h et un .lib mis à dispo par quelqu'un d'autre, l'application que Problème avec dll croisées [ par basic_meu ] Bonjour !Je suis actuellement en train de développer une application qui compporte (entre autres) une dll.D'ordinaire ce genre de librairie ne me pose Dll ou lib dans un ActiveX [ par sephiro ] Bonjour,J'utilise ATL pour faire un ActiveX, l'ensemble de mon code fonctionne tres bien , connexion sur un serveur http, requete et reception de donn VC6 et options de compilation via pragma [ par bbear ] re bonjourquelles sont les options possibles avec pragma pour la compilation?par exemple, pour ajouter une lib : pragma(lib,"lalib.lib")mais pour un o source que je n'arrive pas a compilé [ par h4ck7r ] voila, bah c'es simple je cherche a compilé un fichier cpp j'ai testé DEv C++ et Borland C++Builder 6  mais impossible de compilé avec dev c++ ensuite Compilation programme utilisant GLX sous linux [ par neodelphi ] Bonjour tout le monde... J'essaye actuellement d'utiliser la librairie glx sous linux qui est censé me permettre de faire de l'openGl avec le système


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

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,562 sec (3)

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