2009-05-29 5 views
2

Que dois-je faire pour implémenter un système de type crochet?
Ceci est ma configuration:Accrocher dans ma demande

Je ces bibliothèques statiques:

  • A.lib
  • B.lib

A et B sont comme des modules qui peuvent être inclus ensemble dans une même application. La chose est que j'ai une fonction dans A que je veux exposer à B. Je faisais cela avec une liste de rappel ... mais je ne suis pas à l'aise avec cette idée. Donc, je pense que je peux mettre en place un système de type hooking, comme Win32API, mais je veux entendre une opinion d'un expert.

Bien sûr, j'ai accès aux deux codes source.

REMARQUE: j'ai oublié de mentionner que je n'utilise PAS de classe et que je ne peux pas créer de classe ou d'objet pour ce projet, à cause d'une décision de conception.

Répondre

2

Avez-vous envisagé de déplacer la partie partagée dans une troisième bibliothèque?

Un mécanisme d'accrochage ne serait pas très utile dans un scénario strictement lié statiquement - une dépendance partagée avec une aide supplémentaire de complication dynamique. Si vous avez un emplacement où placer vos deux bibliothèques, placez simplement la fonction à la place. Vous pouvez également exporter la fonction de la bibliothèque A, la référencer depuis la bibliothèque B, peut-être vous assurer que les bibliothèques sont liées dans le bon ordre et que l'éditeur de liens doit les trier pour vous.

Si la bibliothèque A peut être liée ou non, et que votre chaîne d'outils la supporte, vous pouvez déclarer une version factice de la fonction dans B comme weak symbol qui est substituée si A est lié.

+0

Merci pour la réponse rapide. Oui je l'ai fait, mais la chose est que je ne veux exposer que cette fonction, donc je vois inutile de générer une dépendance supplémentaire à l'application, uniquement à cause d'une fonction. – Veehmot

+0

Un mécanisme d'accrochage ne serait pas alors une victoire - une dépendance partagée avec une aide supplémentaire de complication dynamique. Si vous avez un emplacement où placer vos deux bibliothèques, placez simplement la fonction à la place. –

+0

Je vois ce que vous voulez dire maintenant. C'est une bonne approche, mais j'attendrai d'autres réponses. Je serai heureux avec une solution de compilation, comme le remplacement de la fonction ou quelque chose comme ça, en profitant de l'utilisation de bibliothèques statiques. – Veehmot

Questions connexes