j'ai une classe, A, en C++/CLI qui dérive d'une classe de base basé sur un modèle, B. J'ai un code C# qui a une instance de A et veut appeler une méthode dessus. Si la méthode est implémentée dans A tout va bien. S'il est implémenté dans B les choses deviennent étranges.appel d'une méthode de C# sur une base sur matrice C++/CLI classe
Je frappai le code le plus simple qui montre ce que je suis en train de faire:
C++/CLI:
template<typename T>
public ref class B
{
public:
void Test(){}
};
public ref class A : public B<System::Int32> { };
C#:
A a = new A();
a.Test();
Dans ce code de test, l'appel à Test()
ne compile pas (j'obtiens: "ne contient pas de définition pour 'Test'"). J'obtiens le même résultat si je le modifie pour rendre Test()
statique (et l'appeler au A, plutôt que l'instance). Si c'était la fin de l'histoire je voudrais juste serrer mon poing chez Microsoft et vivre avec.
Cependant, dans mon vrai code j'ai mon équivalent à Test()
de travail! Bizarrement, cela ne fonctionne que dans un cas. Si je copie ma méthode de travail et que je change juste le nom, la nouvelle méthode est à nouveau inaccessible.
Pour exclure la désignation étant pris d'ailleurs j'ai essayé d'enlever la méthode de travail. Le code ne parvient pas à générer, comme prévu.
Je suppose que ce que je vois, encore, est un pépin et que ce que j'essaie de faire n'est pas supporté. Mais comme je ne trouve pas de références qui l'excluent, et avec l'anomalie que je vois, j'aimerais savoir avec certitude ce que je devrais attendre.
C'est pourquoi j'aime stackoverflow :-) C'est * exactement * ce qui se passe. Si évident quand on y pense. Je peux y travailler maintenant. Merci pour votre réponse rapide. – philsquared