none
Wrapper C++/CLI vers une LIB native RRS feed

  • Question

  • Bonjour,

    Dans la suite d'une question que j'ai posée récemment sur l'utilisation d'une LIB (code natif) dans un contexte C#,
    et après différents tatonements, j'ai commencé à développer un wrapper comme vous (Gilles Tourreau) me l'aviez suggéré.

    Pour certaines fonctions exposées par la LIB, je n'ai pas de difficulté : elles fonctionnent correctement.
    Par exemple :

    LIB expose la fonction suivante où p est un pointeur sur un tableau :
    bool F1(float * p);

    wrapper :
    bool wrapper::F1(array<float>^ tab)
    {
    pin_ptr<float> t = &tab[0];
    return F1(t);
    }

    et l'appel en C#
        float[] gains = new float[count];
        Boolean ok = wrapper.F1(gains);


    Question : Comment (peut-on) faire l'économie du new au niveau du C#, lorsque p est un pointeur sur une variable simple telle que int, float ou double par exemple, donc localisée sur la pile et non sur le tas comme pour un objet alloué par new ?

    Merci de votre réponse

    Cordialement  


    Alain

    samedi 10 mai 2014 17:55

Réponses

  • Merci Aurel,

    Finalement, après plusieurs tâtonnements, j'ai adopté la solution suivante.
    Elle fonctionne. J'espère qu'il n'y a pas de piège...

    La LIB native expose :
    bool F1(int* p);

    wrapper :
    bool wrapper::F1(int% dat)
    {
    int t = dat;          // Init paramètre
    bool sta = F1(&t);    // Fonction avec paramètre en retour
    dat = t;              // Récupération paramètre modifié
    return sta;
    }

    et l'appel en C#
    int gains= x;
    Boolean ok = wrapper.F1(ref gains);

    Bien cordialement

    Alain


    • Modifié AchLog mardi 13 mai 2014 21:25 correction
    • Marqué comme réponse Aurel Bera mercredi 14 mai 2014 05:42
    mardi 13 mai 2014 21:24

Toutes les réponses