2010-11-24 5 views
0

Bonne nuit,Quelques questions sur C++/CLI et C# intégration

Je tentais de faire une dll simple dans C++/CLI à utiliser dans mon C# bibliothèque en utilisant quelque chose comme le code suivant:

// This is the main DLL file. 

#include "stdafx.h" 

namespace Something 
{ 
    public class Tools 
    { 
     public : int Test (...) 
     { 
      (...) 
     } 
    } 
} 

Je peux compiler la DLL et la charger dans le projet C# sans aucun problème, et je peux utiliser l'espace de noms Something et la classe Tools from C#. Le problème est que lorsque j'essaie d'écrire Tools.Test (quelque chose), j'obtiens un message d'erreur disant que Tools n'a pas de définition pour Test. Pourquoi le compilateur ne peut-il pas obtenir la fonction, même si elle est déclarée publique?

Aussi ... Puis-je partager une classe sur deux projets, la moitié écrite en C# et la moitié écrite en C++ géré?

Merci beaucoup.

+0

nous montrer la – abelenky

Répondre

0

La fonction n'est pas statique. essayez ceci dans le

var someTools = new Tools(); 
int result = someTools.Test(...); 

ou faire la méthode statique:

public : 
    static int Test (...) 
    { 
      (...) 
    } 
+0

L'exemple de Miguel ne fonctionne pas parce que la méthode n'est pas statique, mais parce que la classe n'est pas une classe ref et n'est donc pas visible par le CLR Rendre la méthode statique ne change pas cela. –

1

C# ne peut accéder à des classes C++ géré. Vous devez utiliser public ref class Tools pour indiquer que Tools est une classe managée pour la rendre accessible à partir de C#. Pour plus d'informations, voir msdn.

Cette classe peut ensuite être utilisée dans C++ ou C# managé. Notez que les classes C++ gérées peuvent également utiliser des classes C++ natives en interne.

1

Vous pouvez partager une classe gérée à travers un projet, mais ce que vous avez écrit dans un environnement non géré (c.-à-classe standard C++. Utilisez le mot-clé ref class pour définir une classe gérée en C++.

// This is the main DLL file. 

#include "stdafx.h" 

namespace Something 
{ 
    public ref class Tools 
    { 
     public : int Test (...) 
     { 
      (...) 
     } 
    } 
}