EXE en Delphi utilisé comme DLL à partir de VBA ou d'un prog C++

mikimike197 Messages postés 10 Date d'inscription mardi 17 août 2004 Statut Membre Dernière intervention 30 novembre 2006 - 17 nov. 2006 à 22:44
mikimike197 Messages postés 10 Date d'inscription mardi 17 août 2004 Statut Membre Dernière intervention 30 novembre 2006 - 30 nov. 2006 à 22:52
Bonjour à tous.

J'ai plusieures questions précises:

 - Peut-on utiliser un EXE programmé en Delphi comme une DLL (appel de fonctions de l'exe à partir d'une autre application avec passage d'arguments par valeur et par référence) qui serait utilisé par VBA Excel (ou Access) ? 

 - Si oui, quelles sont les précautions à prendre (correspondances de type par ex...) et quel est le code à utiliser sous Delphi et quel est celui à utiliser sous VBA ?

Merci d'avance pour votre aide...,....

Je précise que je ne maitrise pas l'écriture du programme en delphi (le programme est écrit par quelqu'un qui modifira son code suivant ce que je souhaite, mais je n'ai pas accès à celui-ci). Par contre, le prog en VBA, c'est moi qui l'écrit !
Ensuite, j'explique pourquoi VBA : tout bonnement parce que les données d'entrée et de sortie de mon prog se situent dans un tableur Excel (ou Access) et que je n'ai pas accès à un autre language à partir de mon boulo.

Mikaël, dit Platipu$.
[8D] The Lord Works in mysterious ways

9 réponses

f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
18 nov. 2006 à 00:05
alors :

Peut-on utiliser un EXE programmé en Delphi comme une DLL

la reponse est non, car un Executable, qu'il soit ecrit en C, C++, Delphi, VB ou pur ASM ne possede pas les clauses "Exports" necessaire au partage de fonction comme a l'interieur d'une DLL.
a moins de pouvoir passer des pointeurs (entier 32bits) en ligne de commande a l'executable pour pointer sur la donnée source et la destination.
bien sur le programme doit connaitre le type de donnée a traiter de cette maniere.

Le mieux est d'ecrire une DLL (peu importe le langage), d'exporter les fonctions necessaires et d'ecrire un header (entete d'api qui contient la declaration des fonctions et structure necessaire a l'utilisation des fonctions de la DLL dans le langage de destination) pour chaque langage (vb, c, c++, delphi).

l'utilisation d'une DLL serat beaucoup plus simple que l'utilisation d'un EXE en ligne de commande. sinon il reste la solution de la creation d'un service de traitement de données (SDC)  qui fonctionne un peu comme un serveur local, auquels on transmets des requettes. bien sur, cela veux dire qu'il faut ecrire l'ensemble d'un moteur de requettes qui possederait sa propre syntaxe.

Autres solution encore possible, le hook d'adresse de fonction. mais la ca demande des competences de hacking assé avancée puisqu'il s'agit de recuperer l'adresse memoire des fonctions de l'executable et de les appelées dans notre programme.
cette derniere methode est encore moins facile a mettre en oeuvre sans parler des eventuelles et nombreuses violation d'accés memoire et du bloquage de ce procédé par les anti-virus/firewall actif.
 

0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
18 nov. 2006 à 09:59
On peut aussi, assez simplement, ajouter une interface COM à l'exécutable Delphi.
Tu pourras alors piloter l'application comme tu pilotes Excel ou Word avec ton application VBA.

May Delphi be with you !
<hr color="#008000" />
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
0
mikimike197 Messages postés 10 Date d'inscription mardi 17 août 2004 Statut Membre Dernière intervention 30 novembre 2006
18 nov. 2006 à 23:09
Merci pour votre aide, je sais maintenant que l'on ne peut utiliser un EXE comme une DLL.
Il n'est malheureusement pas possible de modifier l'EXE en DLL (l'exe est utilisé comme tel et il serait trop cher pour moi de demander de développer de exe en dll).

Cependant, je sais qu'il est pôssible en Cpp de mettre des arguments à la fonction "main" est d'appeler le programme en passant les arguments sous VBA avec la fonction Shell... Qu'en est-il avec le Delphi ?

[8D] The Lord Works in mysterious ways
0
mikimike197 Messages postés 10 Date d'inscription mardi 17 août 2004 Statut Membre Dernière intervention 30 novembre 2006
18 nov. 2006 à 23:25
Et comment se sert-on de cette fonction COM dont tu parles Delphiprog ?

Merci d'avance à vous tous...

[8D] The Lord Works in mysterious ways
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
19 nov. 2006 à 02:13
"Cependant, je sais qu'il est pôssible en Cpp de mettre des arguments à la fonction "main" est d'appeler le programme en passant les arguments sous VBA avec la fonction Shell... Qu'en est-il avec le Delphi ?"

F0xi t'as dit:
"a moins de pouvoir passer des pointeurs (entier 32bits) en ligne de commande a l'executable pour pointer sur la donnée source et la destination.
bien sur le programme doit connaitre le type de donnée a traiter de cette maniere."

Précison que la focntion shell appel une ligne de comannde. (au cas ou cela ne serrait pas évident pour toi)

donc, oui. on peut faire cela. Mais si t'as plus d'une ou deux fonctions, ca risque de devenir chaud (comme l'a très bien expliquer f0xi). Si tu passe des string court ou des entier ça vas. Si tu doit passer des structure de donnée, c'est moins facile.

Note que transformer un exe dont tu veux utiliser certaines fonctions en dll , bin c'est pas bien dur, ni long, ni cher. surement moins cher que d0ajouter un traitement de la ligne de commande. En fait ça dépend pas mal des fonction que tu doit exporter. si elle ne dépende QUE des paramètre, c'est super simple. sinon, ça devient plus compliquer.

aussi une solution (moche) consite a envoyer des pression de touche à ton applic Delphi. (pour cliquer sur des bouton ou taper du text dans des Tedit). Mais c'est très moche.

je pense que le plus simple c'est de faire une dll. bien sur, cela dépend de beaucoup de choses...
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
19 nov. 2006 à 11:28
Loda a dit : "je pense que le plus simple c'est de faire une dll. bien sur, cela dépend de beaucoup de choses..."
Si l'exe comprend des fiches (ce qui est fort probable), cela va gonfler la DLL et poser beaucoup de problèmes si le code repose trop sur l'interface utilisateur.

La solution de l'automation COM permet d'éviter ce problème majeur en proposant un moyen d'accès à l'application (jetez un oeil sur le fonctionnement de Word ou d'Excel en mode serveur automation COM).
Avant de poursuivre la discussion, jetez d'abord un oeil sur le code simple, mais démonstratif, de cette petite application : ../php/ole/index.htm&id=112 Création d'un serveur OLE Automation

Vous verrez, ce n'est pas compliqué du tout et ça peut vous donner des idées pour vos projets passés ou futurs

May Delphi be with you !
<hr color ="#008000" />
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
21 nov. 2006 à 12:18
Salut,
@ Delphiprog :
Merci pour ce lien très très instructif. Je n'avais même pas osé penser faire un serveur OLE Automation
étant persuadé que de toutes manières c'était trop compliqué ...
Le lien que tu nous offres cette fois démontre le contraire, en effet la compréhension et la mise en oeuvre sont d'une simplicité enfantine, même un débutant peut y arriver.

Merci beaucoup

 
@+
Cirec

0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
21 nov. 2006 à 18:16
Attention toutefois : cette simplicité n'est valable que pour Delphi. Sous d'autres langages ou environnemments de développement, c'est une autre paire de manches...
Je suis heureux que tu aies trouvé ce lien utile à ta connaissance.
0
mikimike197 Messages postés 10 Date d'inscription mardi 17 août 2004 Statut Membre Dernière intervention 30 novembre 2006
30 nov. 2006 à 22:52
Merci Delphiprog pour ce lien.

Toutefois, les exemples concernent le pilotage de Excel par OLE sous Delphi, mais ce qui m'intéresse, c'est le contraire: appeler des fonctions de l'EXE à partir de Excel.
De plus, la déclaration du serveur OLE de l'EXE dans le registre nécessite t-il d'avoir les privilèges administrateurs sur le poste ?

Merci de votre aide.

[8D] The Lord Works in mysterious ways
0
Rejoignez-nous