Exports Shell Extension

Signaler
Messages postés
17
Date d'inscription
dimanche 4 mai 2003
Statut
Membre
Dernière intervention
23 mai 2004
-
Messages postés
17
Date d'inscription
dimanche 4 mai 2003
Statut
Membre
Dernière intervention
23 mai 2004
-
Hello tout le monde, j'ai un problème avec une Shell Extension. Les fonctions sont déclarées avec __stdcall et j'ai mis un .def avec le nom de la lib et les exports que je voulais faire, je l'ai mis dans les fichiers sources comme dans l'exemple et comme dans les autres shell extensions open source ke j'ai pu trouver sur le net... seulement voilà, ces fonctions (DllCanUnloadNow, DllGetClassObject) ne sont jamais appelées ! (DllMain l'est, en revanche, donc apparemment windows a bien compris ke je veux utilser cette DLL, ca doit donc pas etre une erreur de registre)

et sinon, avec un programme de test, je fais un GetProcAddress(hmod, "DllCanUnloadNow") et il me renvoie 0... donc apparemment la fonction n'a pas été exportée... ya-til quelque chose de spécial à faire avec le .def, une option à rajouter ?
Quand je rajoute __declspec(dllexport) sur ces fonctions, il me sort un warning comme quoi le dllexport a été ignoré, apparemment c incompatible avec __stdcall

Quelqu'un saurait-il comment faire pour que les fonctions soient bien exportées ?
Merci d'avance
guimou

PS: j'utilise pas MFC ou autre

4 réponses

Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
Avec Visual, il y a un prog nommé Depends.exe (répertoire Common ou qqch comme ça) qui permet de savoir quelles sont les fct exportées et les Dlls importées d'un prog.

en ouvrant ton prog dedans tu pourras voir si tes fct sont exportées avec le bon nom.

sinon voici un exemple de déclaration:

.def (les @n et private ne sont pas nécessaire voire interdit selon le compilo):

EXPORTS
DllCanUnloadNow @1 PRIVATE
DllGetClassObject @2 PRIVATE
DllRegisterServer @3 PRIVATE
DllUnregisterServer @4 PRIVATE

.cpp :

HRESULT __stdcall DllCanUnloadNow()
{
...
}

HRESULT __stdcall DllGetClassObject(const CLSID& clsid, const IID& iid, void** ppObj)
{
...
}

HRESULT __stdcall DllRegisterServer()
{
...
}

HRESULT __stdcall DllUnregisterServer()
{
...
}
Messages postés
17
Date d'inscription
dimanche 4 mai 2003
Statut
Membre
Dernière intervention
23 mai 2004

pour Depends.exe -> merci je ne connaissais pas et ça va beaucoup me servir

bon le code, c'est a peu près bon (sauf ke ya pas les deux dernieres fonctions) mais c'est déclaré pareil

mais ya vraiment un probleme avec les exports chez moi :
j'ai fait un test tout simple de DLL
main.cpp
#include "Windows.h" // pas très utile d'ailleurs

extern "C" // j'ai essayé avec et sans
int __stdcall testouille(int a, int b)
{
return (a+b);
}

main.def :

EXPORTS
toto @1 PRIVATE

hé bin il exporte rien du tout !!!!!
tu sais de quoi ça peut provenir ?
Merci d'avance, @+
guimou
Messages postés
17
Date d'inscription
dimanche 4 mai 2003
Statut
Membre
Dernière intervention
23 mai 2004

euh lol g changé le nom mais c'est bien le meme dans les deux !
Messages postés
17
Date d'inscription
dimanche 4 mai 2003
Statut
Membre
Dernière intervention
23 mai 2004

C'est bon j'ai trouvé, c'était vraiment une erreur tout con : j'avais pas mis /DEF dans le linker, j'avais juste mis le fichier dans le groupe "source"

maintenant ça marche...
Merci encore pour Depends.exe !