3 votes

Habillage de Visual C++ en C#

J'ai besoin de faire de l'injection de processus en utilisant C++ mais je préférerais utiliser C# pour tout ce qui n'est pas de bas niveau. J'ai entendu parler de "function wrapping" et de "marshaling", j'ai fait quelques recherches sur Google et j'ai trouvé des informations ici et là, mais je n'y arrive toujours pas.

Les choses que j'ai lues par ordre d'utilité ;
http://msdn.microsoft.com/en-us/library/ms235281(VS.80).aspx
http://www.drdobbs.com/cpp/184401742
http://geeklit.blogspot.com/2006/08/calling-c-lib-from-c.html

Comment puis-je envelopper tous les éléments de bas niveau (C++ natif) dans C# afin de pouvoir commander facilement ces fonctions dans un langage avec lequel je suis plus à l'aise, C# ?

Toute information sur le sujet est la bienvenue.

5voto

Arnout Points 2278

Je pense que P/Invoke est vraiment l'approche la plus simple :

  • Créer une DLL dans non géré C++, contenant toutes les fonctionnalités dont vous avez besoin pour faire l'injection.
  • Dans votre code C#, déclarez des static extern et utiliser les méthodes DllImport pour les faire pointer vers votre dll C++. Pour plus de détails, voir le lien fourni par arul sur sa réponse .

Notez que P/Invoke n'est pas limité aux "fonctions de l'API Windows" - vous pouvez appeler les fonctions exposées par toute DLL native.

Un inconvénient potentiel de P/Invoke est que vous devrez fournir les signatures de vos fonctions C++, en spécifiant éventuellement un marshalling moins évident. Dans ce cas, vous pouvez envisager de construire un serveur COM au lieu d'une DLL "ordinaire", et d'utiliser la fonction COM interop pour appeler votre code depuis C#.

2voto

arul Points 10719

Vous voulez utiliser P/Invoke, voir Magazine MSDN .

1voto

OJ. Points 16939

Si Pinvoking n'est pas ce que vous voulez faire, créez alors une application C++ gérée. Utilisez le C++ natif pour faire le travail d'injection de processus. Utilisez le C++ géré pour créer une interface conviviale .NET pour ce comportement natif. Celle-ci peut ensuite être appelée depuis C#.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X