Comment wrapper des fonctions dans une librairie statique de Windows?

Comment wrapper des fonctions dans une librairie statique de Windows? - C - Programmation

Marsh Posté le 20-01-2015 à 18:13:18    

Bonjour
 
Je ne suis pas arrivé à trouver un topic avec ce sujet exactement.
J'ai une librairie windows à linker en statique.
En gros supposons une lib A en static avec une fonction void f(int) en dllexport.
Je voudrais constituer une dll qui intègre cette lib tout en exposant ma propre version de void f(int) qui appellera dans son code la fonction f de la lib A ce qui est impossible puisque j'ai deux mêmes fonctions.
Est-ce que qq'un aurait déjà résolu ce genre de cas ?
 
En attendant, je suis obligé de linker avec la dll A et d'appeler un getProcAdress.
Ma piste pour le moment, ce serait de faire une indirection :
- faire une lib B qui wrappe la fonction f de A dans une fonction f' et exporter f'
- faire ma dll C qui linkera B en appelant f' dans une fonction f de même signature que celle de A.
Cependant je pense que je vais bloquer puisque le linker aura quand même deux fonctions void f(int).  
 
Merci d'avance


Message édité par mogana le 20-01-2015 à 20:20:53
Reply

Marsh Posté le 20-01-2015 à 18:13:18   

Reply

Marsh Posté le 20-01-2015 à 20:07:13    

Ben si tu as des librairies, elles doivent avoir des namespaces (un concepteur de librairie C++ qui n'utiliserait pas un namespace, faut le passer à la broyeuse et ses restes à l'acide, avant qu'il ne fasse d'autres dégâts...)
Et en préfixant le bon namespace, fini tes problèmes.
A+,

Message cité 1 fois
Message édité par gilou le 20-01-2015 à 20:07:51

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 20-01-2015 à 20:20:31    

gilou a écrit :

Ben si tu as des librairies, elles doivent avoir des namespaces (un concepteur de librairie C++ qui n'utiliserait pas un namespace, faut le passer à la broyeuse et ses restes à l'acide, avant qu'il ne fasse d'autres dégâts...)
Et en préfixant le bon namespace, fini tes problèmes.
A+,


 
C'est du C.
Ce qui fait que je me suis surement trompé de catégorie  :??:  
je essayer de déplacer.
en tout cas merci pour la réponse.  :jap:

Reply

Marsh Posté le 20-01-2015 à 21:21:32    

[:yohland] Juste une 'tite remarque en passant :
 
La lettre "D" dans "DLL" signifie "Dynamic". Donc, ce n'est pas une bibliothèque statique.
Une bibliothèque statique est généralement un ".a", voire un ".lib", mais pas un ".dll".

Reply

Marsh Posté le 20-01-2015 à 22:19:31    

olivthill a écrit :

[:yohland] Juste une 'tite remarque en passant :
 
La lettre "D" dans "DLL" signifie "Dynamic". Donc, ce n'est pas une bibliothèque statique.
Une bibliothèque statique est généralement un ".a", voire un ".lib", mais pas un ".dll".


 
merci d'avoir précisé  :jap:  
cependant je ne vois pas où j'ai fait la confusion  :??:  
j'ai bien deux versions de A, une lib et une dll.
Mais pour certaines raisons, je veux faire une dll qui intègre une lib mais tout en exposant dans la dll les foncions exportées de la lib. (dll pour la dynamic et lib pour la statique)
en gros une nouvelle dll A qui wrappe les fonctions de A

Reply

Marsh Posté le 20-01-2015 à 23:18:51    

Si c'est du C, tu n'as qu'un espace de nom pour les fonctions (ce pourquoi bien souvent les fonctions exportées d'une lib sont préfixées par un préfixe commun) donc non, tu n'auras pas moyen d'utiliser deux fonctions de même nom.
C'est typiquement ce type de limitation qui a amené le C++ a créer les namespaces.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 21-01-2015 à 09:31:40    

gilou a écrit :

Si c'est du C, tu n'as qu'un espace de nom pour les fonctions (ce pourquoi bien souvent les fonctions exportées d'une lib sont préfixées par un préfixe commun) donc non, tu n'auras pas moyen d'utiliser deux fonctions de même nom.
C'est typiquement ce type de limitation qui a amené le C++ a créer les namespaces.
 
A+,


 
Je m'en doutais, merci  :jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed