2009-12-06 2 views

Répondre

3

Vous avez deux options que je connais:

1) Vous pouvez compiler la DLL C# avec le soutien COM, et y accéder à partir de C++ via COM. Cela impliquera COM Interop qui peut être plus lent que les appels .NET gérés à gérés.

Pour compiler une DLL C# avec prise en charge COM, accédez aux propriétés du projet-> Application-> Informations d'assemblage-> Rendre l'ensemble COM-Visible. Vous utilisez regasm pour enregistrer la DLL sur la machine de l'utilisateur. Ceci est similaire à l'utilisation regsvr32, à l'exception regasm est pour .NET DLL:

http://www.csharphelp.com/archives/archive190.html

Personnellement, j'utilise aussi le commutateur/CODEBASE avec regasm pour DLLs que je l'intention d'être pour COM uniquement. Il fonctionnera toujours sans le commutateur/CODEBASE, mais la DLL apparaîtra également dans le Global Assembly Cache, ce qui ajoute simplement de l'encombrement au GAC et vous inscrit dans beaucoup de fonctionnalités dont je n'ai pas besoin pour mes scénarios d'interopérabilité COM.

Vous pouvez également définir "Enregistrer pour COM-Interop" sous Build, mais ce n'est pas obligatoire. Il est simplement utile lors du débogage répété, car il enregistrera la DLL COM avec regasm sur votre machine lorsque vous le compilez. Cela n'a vraiment rien à voir avec la DLL elle-même. Vous aurez toujours besoin de regaser la DLL sur les machines de l'utilisateur. Après l'enregistrement, vous devriez être en mesure d'ajouter une référence COM à la DLL C#, et de faire des appels à partir de C++ natif, tout comme vous le feriez pour tout autre composant COM.

Ou

2) Vous pouvez compiler le projet C++ en tant que projet C++/CLI géré, vous permettant de faire référence à DLL .NET, comme une DLL C#. Je pense que ce serait la meilleure option si C++/CLI n'est pas un problème pour vous. Les appels entre le code C++/CLI et la DLL C# doivent être meilleurs que ceux de COM Interop, mais d'un autre côté, C++/CLI lui-même est légèrement plus lent que le C++ natif.

+1

comment puis-je y accéder depuis COM? Je ne veux pas utiliser C++ géré. l'utilisation de C++ géré aura une incidence sur les performances, n'est-ce pas? –

+0

Oui et Non. En général, le C++ géré est légèrement moins performant que le C++ natif. Mais dans votre cas, vous envisagez de faire des appels COM dans une DLL C# .net, qui s'appelle COM interop, et dans mon expérience, l'interopérabilité COM est plus lente qu'un appel géré-à-géré. Je vais ajouter des informations sur la façon de compiler C# DLL comme une DLL COM, dans le cas où vous décidez que c'est ce que vous voulez faire. – AaronLS

+0

merci beaucoup. oui je voudrais. Donc vous pensez que la performance n'est pas un gros problème ici? –

Questions connexes