2010-12-30 3 views
2

Je ne peux pas modifier le code, il est compilé et je ne peux pas modifier la source, mais j'ai besoin d'enregistrer certaines données étant envoyé à elle. Je peux lier par DLL. J'essaye de capturer l'appel de fonction, le redirige vers une nouvelle DLL qui est liée, stocke les données dont j'ai besoin, mais appelle ensuite la fonction non modifiée. Je peux capturer l'appel en faisant juste un dllimport et en redéfinissant la fonction dans ma DLL, mais à la fin je ne peux pas appeler la fonction originale. Comme ils portent le même nom, cela devient un appel récursif. Comment puis-je rappeler et quitter? J'utilise VC++ avec VS2005.Comment puis-je rediriger un appel de fonction, puis rappel à la fonction "original" C++

Répondre

1

Ne pas utiliser DllImport pour charger la fonction d'origine. Utilisez à la place LoadLibrary (Ex) et GetProcAddress pour charger la DLL d'origine et trouver la fonction d'origine et la placer dans une variable.

Une fois cela fait, vous pouvez appeler la fonction d'origine via la variable.

+0

Lorsque je charge la DLL, j'obtiens un handle valide, mais lorsque j'appelle GetProcAddress, elle renvoie null. J'ai même essayé sur ma propre DLL compilée, et je reçois la même chose. Cette fonction semble si facile à utiliser, je ne suis pas sûr de ce que je fais mal. –