2010-03-18 4 views
3

Avertissement: Je ne suis pas un développeur C++, je ne peux que faire des choses de base. (Je comprends les pointeurs, juste ma connaissance est si rouillée, je n'ai pas touché c/C++ depuis environ 20 ans :))C++ simple enregistrement conditionnel

La configuration: J'ai un addin Outlook, écrit en C# /. Net 1.1. Il utilise un c++ shim pour charger.

Habituellement, cela fonctionne assez bien, et je l'utilise dans mon C# code nlog à des fins de journalisation. Mais parfois, l'addin ne se charge pas, c'est-à-dire il ne frappe pas du tout le code managé pour que je puisse étudier le problème à partir des fichiers journaux. Donc, j'ai besoin d'accrocher une connexion de base dans le shim C++ - en écrivant simplement dans un fichier. Je dois le rendre aussi simple que possible pour que nos utilisateurs puissent l'activer. En fait, je préférerais ne pas l'expédier par défaut.

Je pensais à quelque chose, qui va vérifier si une DLL spécifique est présente (la DLL de journalisation), et si oui, de l'utiliser. Sinon, il ne se connectera à rien. De cette façon, quand j'ai un utilisateur avec de tels problèmes, je peux lui envoyer seulement le dll de notation, l'utilisateur l'enregistrera dans le répertoire d'exécution, et j'aurai le dossier.

Je suppose que cela doit être fait avec une forme de solution d'usine, qui renvoie soit un enregistreur factice, ou si la DLL est trouvée, une vraie.

Une autre option consisterait à créer un enregistreur simple et à reconstruire la cale avec ou sans l'utiliser, en fonction des directives. Ce n'est pas l'approche souhaitable, car le shim doit être signé, et je dois demander à l'utilisateur de faire une copie de sauvegarde du "vrai", puis de le restaurer une fois terminé, etc., au lieu de sauvegarder et de supprimer un dll .

J'apprécierais n'importe quelle bonne suggestion comment l'approcher, avec des liens ou un code d'exemple comment aller après ceci.

Vive

Répondre

2

Le chargement des coutures de dll de journalisation est une manière compliquée de gérer le problème de configuration. Pourquoi ne pas utiliser le registre. Si vous utilisez un chargement conditionnel sur dlls vous utiliserez LoadLibrary et GetProceAddress et comme vous l'avez dit vous n'êtes pas vraiment un codeur C++ alors pourquoi introduire la complexité. En outre, il doit y avoir n + 1 bibliothèques de journalisation C++ disponibles avez-vous regardé dans l'un de ceux-ci.


Certains j'ai trouvé après une recherche Google

+0

Oui, log4cplus est bon aussi: http://log4cplus.sourceforge.net/ – neuro

1

Pourquoi ne pas avoir une clé de registre pour cela? L'utilisateur ouvre regedit, ajoute une clé et votre bibliothèque commence à se connecter. Le code de journalisation sera toujours en place, mais pas invoqué lorsque la clé est absente ou défini sur "pas de journalisation".

+0

Eh oui, peut être fait. Juste habituellement, je n'aime pas demander aux utilisateurs de toucher leur registre. Encore, j'aurai besoin d'un exemple de code, ou d'une suggestion pour un log/framework de journalisation. –

+0

Oui, mais vous pouvez activer la journalisation à distance si theres et question et comment utilise une DLL n'importe quel easer pour les utilisateurs. – rerun