2009-04-15 7 views
0

sonne comme une idée terrible? Oui, je le pensais aussi. Inutile de dire que j'ai dit que je devais le faire.enveloppant une application MFC Gui dans une DLL (ou quelque chose d'autre) pour .NET interop

Situation: Ancienne application gui C++ basée sur MFC qui lit et traite un grand nombre de sources de données dans une structure de données interne, avant de l'afficher à l'utilisateur.

Problème: J'ai besoin de cette infrastructure de données dans .NET, au format XML.

Solution:

  1. Faire une fonction dans l'application MFC qui écrit la structure de données à une grande chaîne XML (facile).
  2. dllexport cette fonction (ou COM?) (En tant que fonction C++ ou C ou quoi?)
  3. Compilez l'application MFC GUI dans une DLL (comment?).
  4. ???
  5. Référence la dll de .NET et méthode P/Invoke pour un grand profit.

Est-ce que cette folie est? Est-il possible de compiler une bibliothèque DLL à partir d'une application GUI MFC sans le modifier? Est-ce une idée horrible? Quelles sont mes alternatives? Im assez tbh perdu.

Répondre

1

Je voudrais travailler sur l'extraction du code de logique métier spécifique dans l'application MFC et coller ce contenu dans une DLL, plutôt que d'essayer d'envelopper l'application entière. Vous pourriez faire une fausse supposition ici qu'il vous faudra moins d'efforts pour emballer l'application MFC en tant que DLL (en supprimant tout le code de l'interface graphique, en ajoutant une DLL principale et en modifiant le processus de construction pour produire une DLL) , que l'effort pour isoler le code de logique métier et le mettre dans un nouveau projet DLL.

Pour encapsuler le GUI en tant que DLL, vous devez avoir une bonne compréhension des dépendances du code de la logique métier et de son utilisation par l'interface graphique, vous pouvez donc tout simplement supprimer ces éléments.

+0

c'est ce que je ferais aussi - mais je ne peux pas, parce que je suis juste un entrepreneur et ils 'n'ont pas les ressources' pour changer la portée pour inclure le refactoring de l'application. – dalyons

+0

Je pense que les ressources pour lier l'application graphique en tant que DLL et exposer la logique métier appropriée en tant que fonction exportée peuvent être équivalentes à l'extraction de cette logique métier et à la création d'une nouvelle DLL. – RedBlueThing

+0

Je suis d'accord avec Cannonade. Je ne pense pas que votre approche va fonctionner (je ne suis pas un expert dans ce genre de choses cependant). Mais isoler la logique métier est toujours une bonne idée (pas seulement dans ce cas particulier) et vous apportera d'autres avantages. –

0

Pouvez-vous changer un peu la source MFC? Pourquoi ne pas ajouter des paramètres de ligne de commande pour que l'application crache XML en sortie std au lieu de lancer l'interface graphique? En CWinApp::InitInstance, vous avez accès aux paramètres de ligne de commande par inheriting CCommandLineInfo À partir du client .Net, lancez le processus et capturez la sortie.

Questions connexes