2009-10-21 3 views
2

Je n'ai pas beaucoup d'expérience dans un langage tel que C# donc je serais heureux si vous pouviez m'aider. J'ai écrit cette méthode en C++ en utilisant la bibliothèque MRIP:Données de Marshalling pour C#

mpz_class SchnorrProtocol::getX(const mpz_class& r) const 
{ 
    mpz_class x; 
    mpz_powm(x.get_mpz_t(), this->params_.getBeta().get_mpz_t(), r.get_mpz_t(), this->params_.getP().get_mpz_t()); 
    return x; 
} 

et maintenant je veux importer à C#:

#region Filter & P/Invoke 
#if DEBUG 
     private const string DLL = "schnorrd.DLL"; 
#else 
     private const string DLL = "schnorr.DLL"; 
#endif 

     [DllImport(DLL)] 
    "method definition" 
     ...... SchnorrProtocol::getX(......); 

mon problème, je ne sais pas comment le faire. Pourriez-vous s'il vous plaît m'aider?

Répondre

1

Vous devez utiliser structlayout attribute pour définir mpz_class, à savoir,

[StructLayout(LayoutKind.Explicit, Size=16, CharSet=CharSet.Ansi)] 
    public class mpz_class 
    { 
     // your class definition 
    } 

    [StructLayout(LayoutKind.Explicit, Size=16, CharSet=CharSet.Ansi)] 
    public class SchnorrProtocol 
    { 
      // your class definition. 
    } 

Et here's how vous, maréchal une méthode dans une classe C++

[ DllImport(DLL, 
    EntryPoint="[email protected]@@[email protected]", 
    CallingConvention=CallingConvention.ThisCall)] 
    public static extern int TestThisCalling(SchnorrProtocol prot); 
+0

le problème est: mpz_class est classe C++ qui est avalable avec: #include donc les opérateurs standard et les diverses fonctions standard sont overloa ded pour permettre l'arithmétique avec cette classe. Je ne sais pas comment écrire une définition de telle classe. :( – Tatiana

Questions connexes