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).