2009-10-05 12 views
0

J'ai un projet existant créé en utilisant C/C++ dans un environnement de développement. Actuellement, nous voulons facelift le formulaire existant à l'aide d'une application mais le problème est que le projet existant utilise la bibliothèque d'exécution commune = No/CLR et la bibliothèque d'exécution =/MTd.Comment utiliser Windows Forms dans une application C/C++?

Mais l'application Windows Forms utilise Common Runtime Library =/CLR et Runtime Library =/MDd. Veuillez indiquer s'il est possible d'utiliser une application Windows Forms pour créer un formulaire dans le projet existant.
Y at-il un tutoriel à ce sujet?

Le commentaire de MSDN est: -

Attention Ne pas mélanger statique et versions dynamiques des bibliothèques à la gestion du temps. Avoir plus d'une copie des bibliothèques d'exécution dans un processus peut provoquer des problèmes, car les données statiques dans une copie ne sont pas partagées avec l'autre copie. L'éditeur de liens empêche vous de lier à la fois statiques et dynamiques versions dans un seul fichier .exe, mais vous pouvez toujours finir avec deux (ou plus ) copies des bibliothèques à la gestion du temps. Par exemple, une bibliothèque de lien dynamique liée aux versions statiques (non DLL) des bibliothèques d'exécution peut provoquer des problèmes lors de l'utilisation avec un fichier .exe lié à la version dynamique (DLL) de les bibliothèques d'exécution . (Vous devez également éviter de mélanger les débogage et les versions non-débogage des bibliothèques dans un processus .)
http://msdn.microsoft.com/en-us/library/2kzt1wy3(VS.71).aspx ..

Répondre

1

La réponse est non. Une réponse plus précise est un peu, mais vous ne voudriez probablement pas.

Il est possible d'utiliser Windows Forms (code géré) pour votre interface utilisateur et autre chose (par exemple, code non .NET/non géré) pour votre logique de domaine. Cependant, j'imagine que si vous posez cette question, cela va vous coûter un peu trop pour le moment.

Je vous suggère de créer une interface utilisateur avec Windows Forms et de faire en sorte que cette interface utilisateur appelle une DLL C/C++ native. Google pour PInvoke sur comment appeler une DLL non gérée (C/C++) à partir du code managé (.NET).

Si vous faisiez cela, vous seriez beaucoup mieux placé pour répondre à cette question.

+0

Le problème est maintenant que je ne pouvais pas mélanger des versions statiques et dynamiques de l'environnement. bibliothèques de temps. Y at-il une suggestion comment pourrais-je mélanger les bibliothèques d'exécution? – Jenuel

+0

Pourquoi voulez-vous les mélanger? Je ne pense pas que tu le fasses.Je pense que vous pouvez être confus entre les bibliothèques d'exécution c/C++ et l'exécution .Net. Ce sont des choses complètement séparées. La "Common Runtime Library" est .Net qui est une chose différente de l'autre bibliothèque d'exécution spécifiée avec/MDd ou/MTd. –

0

Mon logiciel d'entreprise doit souvent avoir des modules qui mélangent le code managé et non managé et les interfaces utilisateur. Ce que nous faisons est de séparer les modules dans leurs propres exécutables et d'exposer la fonctionnalité en tant qu'objets COM localserver. De cette façon, le code non géré peut avoir une interface utilisateur écrite en code managé.

Cependant, vous devez faire beaucoup de plomberie pour le faire fonctionner. Nous le faisons de cette façon parce que nos applications ont été déployées sur le terrain pendant des années et il faudra des années pour que l'ensemble du programme se transforme en .NET

+0

Ça a l'air intéressant. Où puis-je trouver un tutoriel concernant l'utilisation de COM? COM peut-il lier des versions statiques et dynamiques des bibliothèques d'exécution? – Jenuel

+0

Il y a beaucoup de tutoriels sur COM que vous pouvez obtenir de google. C'est un sujet assez large, vous devriez donc chercher des tutoriels COM LocalServer. Il sera probablement couvert comme DCOM. Si vous utilisez LocalServer, chaque module peut être son propre EXE, vous pouvez donc mélanger et faire correspondre autant que vous le souhaitez. COM est généralement obsolète en faveur de WCF. J'utilise COM parce que j'ai beaucoup de code C++ hérité qui ne peut pas être converti en .NET sans encourir un coût important. –

Questions connexes