Sooooo J'écris un interpréteur de script. Et au fond, je veux des classes et fonctions stockées dans une DLL, mais je veux la DLL de chercher des fonctions au sein des programmes qui sont un lien vers elle, comme,Compiler une DLL avec gcc
program dll
----------------------------------------------------
send code to dll-----> parse code
|
v
code contains a function,
that isn't contained in the DLL
|
list of functions in <------/
program
|
v
corresponding function,
user-defined in the
program--process the
passed argument here
|
\--------------> return value sent back
to the parsing function
je me demandais essentiellement, comment puis-je compiler une DLL avec gcc? Eh bien, j'utilise un port windows de gcc. Une fois que j'ai compilé un .dll contenant mes classes et fonctions, comment puis-je lier avec mon programme? Comment utiliser les classes et les fonctions dans la DLL? Est-ce que la DLL peut appeler des fonctions du programme qui s'y connecte? Si je fais un objet {...} de classe; dans la DLL, puis lorsque la DLL est chargée par le programme, objet sera disponible pour le programme? Merci d'avance, j'ai vraiment besoin de savoir comment travailler avec les DLL en C++ avant de pouvoir continuer avec ce projet.
"Pouvez-vous ajouter plus de détails sur les raisons pour lesquelles vous souhaitez que la DLL appelle des fonctions dans le programme principal?" Je pensais que le diagramme l'expliquait en quelque sorte ... le programme utilisant la DLL passe un morceau de code à la DLL, qui analyse le code, et si des appels de fonction sont trouvés dans le code, alors les fonctions correspondantes dans la DLL sont appelé ... par exemple, si j'ai passé "a = sqrt (100)" alors la fonction d'analyseur de DLL trouverait l'appel de fonction à sqrt(), et dans la DLL serait une fonction sqrt() correspondante qui calculerait le carré La racine de l'argument lui est transmise, puis elle prend la valeur de retour de cette fonction et la place dans la variable a ... comme n'importe quel autre programme, mais si un gestionnaire correspondant pour la fonction sqrt() n'est pas trouvé dans la DLL (il y aurait une liste de fonctions supportées nativement) alors il appellerait une fonction similaire qui résiderait dans le programme en utilisant la DLL pour voir s'il y a des fonctions définies par l'utilisateur par ce nom. Donc, disons que vous avez chargé la DLL dans le programme donnant à votre programme la possibilité d'interpréter les scripts de ce langage particulier, le programme pourrait appeler les DLL pour traiter des lignes de code simples ou remettre les noms de fichiers de scripts à traiter ... mais si vous voulez ajouter une commande dans le script qui convient à votre programme, vous pouvez définir une valeur booléenne dans la DLL en lui disant que vous ajoutez des fonctions à son langage et ensuite créer une fonction dans votre code qui listerait les fonctions que vous ajoutez (la DLL l'appellera avec le nom de la fonction qu'elle veut, si cette fonction est une fonction définie par l'utilisateur contenue dans votre code, la fonction appellera la fonction correspondante avec l'argument qui lui est passé par la DLL , retourne la valeur de retour de la fonction définie par l'utilisateur à la DLL, et si elle n'existait pas, elle retournerait un code d'erreur ou NULL ou s quelque chose). Je commence à voir que je vais devoir trouver un autre moyen de contourner cela pour faire les appels de fonction vont dans un seul sens
wow, je ne savais même pas qu'il y avait un port gagnant de gcc. J'aurais essayé d'utiliser gcc avec les fenêtres comme cible de la plateforme. – cbrulak
Vous devriez probablement spécifier le compilateur exact que vous utilisez. Probablement la documentation pour ce compilateur vous indique comment faire des DLL. – SoapBox
ça s'appelle mingw, ou mingw32 je suppose ... j'essaierai de trouver la documentation de gcc mais je suis assez nouveau en C et en C++ donc certains aspects sont difficiles à comprendre encore – user61721