bonjour à toutes et à tous,
je découvre et commence à tenter d'utiliser Code::Block
( windows XP ) et j'aimerais crééer une DLL.
je prend donc "tel quel" le template proposé :
Citation : code::block
#include <windows.h>
#ifdef BUILD_DLL
#define DLL_EXPORT __declspec(dllexport)
#else
#define DLL_EXPORT
#endif
void DLL_EXPORT SomeFunction(const LPCSTR sometext)
{ MessageBoxA(0, sometext, "DLL Message", MB_OK | MB_ICONINFORMATION); }
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{ switch (fdwReason)
{ case DLL_PROCESS_ATTACH: // attach to process
break;
case DLL_PROCESS_DETACH: // detach from process
break;
case DLL_THREAD_ATTACH: // attach to thread
break;
case DLL_THREAD_DETACH: // detach from thread
break;
}
return TRUE; // succesful
}
je compile, tout est ok, mais en voulant enregistrer cette DLL
( regsvr32 sample.dll ou regsvr32 /i/n sample.dll )
Citation : regsvr32
sample.dll a été chargée mais le point d'entrée DllRegisterServer est introuvable.
Ce fichier ne peut pas être enregistré.
j'oublie probablement quelque chose,
je n'ai pas compris la marche à suivre,
je n'ai rien compris à rien...
bref, si vous pouviez m'aiguiller, réponse, doc, exemple... ,
ce serait gentil ( j'ai cherché mais pas trouvé,
oui, oui, là aussi je suis nul )
pas compris la réponse.
je suis sous windows XP :
il ne faut pas l'enregistrer ?
donc : je l'appelle comment cette SomeFunction
dans un autre langage ? ( par exemple VB et JScript )
@+
Programmer des dll nécessite d'exporter des points d'entrée.
Quel est ton niveau en programmation ? Si tu es débutant, ne t'attaque pas aux dll.
Dans quel but veux tu créer une dll ? Qu'est ce que tu veux faire avec ? Est ce vraiment nécessaire ? Pourquoi ne pas faire plutot un programme statique ?
>>Quel est ton niveau en programmation ?
faible. j'ai commencé à programmer il y
à un peu plus de 40 ans, et je continue
aujourd'hui.
>>Si tu es débutant, ne t'attaque pas aux dll.
zut alors, j'en use et en abuse avec d'autres
langages. c'est si difficle en C++ ?
Windows n'est-il pas essentiellement basé
sur des DLL en C ?
>>Dans quel but veux tu créer une dll ?
>>Qu'est ce que tu veux faire avec ?
j'utilise parfois J[ava]Script, par exemple,
et quelques routines "orientées"
plus "système" me simplifieraient la vie,
il y a des fonctionnalités qui n'existent
pas en J[ava]Script.
ou, avec d'autres langages de programmation,
qui doivent utiliser un ch'tite routine pointue
( temps de réponse... )
je peux les faire ( simplement ) en VB
mais j'aimerais que ces DLL soient plus
autonomes avec C++
>>Est ce vraiment nécessaire ?
ben non. mais je ne vois pas
comment faire autrement ( sauf avec
un autre langage )
>>Pourquoi ne pas faire plutot un programme statique ?
comme dèjà dis, "routines système" à appeler
dans d'autres langages.
des programmes C++ statiques je sais faire,
je cherche à aller un peu plus loin.
>>Quel est ton niveau en programmation ?
faible. j'ai commencé à programmer il y
à un peu plus de 40 ans, et je continue
aujourd'hui.
Ah , je suis désolé si tu l'as mal pris, c'est qu'il arrive tellement souvent que des jeunes viennent demander un truc difficile, et qu'apres on se rende compte qu'ils s'attaquent a des choses compliquées sans connaitre la base.
Bref, Visiblement, ta fonction n'est pas exportée correctement, essaie de mettre devant, un extern C :
>>Ah , je suis désolé si tu l'as mal pris
pas du tout.
>>il arrive tellement souvent que des jeunes
>>viennent demander un truc difficile,
oh oui, même soucis dans d'autres langages
que je possède un poil mieux.
>>essaie de mettre devant, un extern C :
je vais essayer, je tiens au courant.
ça veut donc dire que regsvr32 est inutile ?
EDIT : parce que je viens d'essayer avec #extern "C"
et regsvr32 : même punition, même motif. RE Edit, je ne sais pas pourquoi le #, j'ai tenté sans : pareil.
Tu compiles bien en "release" ?
Car sur pas mal de compilos, la compilation par defaut est en debug, et les résultats sont liés a des dll de debuggage. ça peut etre une des raisons.
ça fait longtemps que je n'ai pas fait de dll, si j'ai le temps, je verrai si je peut te trouver un exemple !
>>Tu compiles bien en "release" ?
je ne peux pas te dire
>>Car sur pas mal de compilos, la compilation par
>>defaut est en debug,
je vais vérifier comment c'est...
si je trouve où ça se paramètre !
je découvre code::block et c'est dans un patois
que j'entrave très mal ( l'américain je pense )
EDIT :
>>ça fait longtemps que je n'ai pas fait de dll,
on n'en fait pas tous les jours...
>>si j'ai le temps, je verrai si je peut te trouver un exemple !
ce serait extrèmement gentil.
Ce quadruplet de fonctions fait parti de l'interface COM, necessaire pour invoquer et utiliser des objets à partir d'une DLL et de l'enregistrer dans les registres.
Il faut comprendre que COM utilise la base de registre windows pour que l'ordinateur comportant le composant sache quoi instancier et transporter lorsqu'on lui demande de créer l'instance de classe (on passe par son indentificateur unique : le CLSID (CLasS ID))
Alors il faut enregistrer les informations : P.S. je viens de revoir du vieux code et c'est assez compliqué à expliquer ici. De plus, je l'ai vue en même temps, le "extern "C"" n'est pas nécessaire.
>>il faut les définir pas juste les déclarer
suis-je bête ! ( si,si )
merci pour le lien, je m'y précipite,
et si je ne comprend pas je reviendrais.
( c'est une menace ! )
encore merci pour votre patience,
votre disponibilité. je reviendrais.
Cordialement.
créer un DLL en C++
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html