none
interopabilité C# C++ Excel RRS feed

  • Question

  • bonjour,

    Je suis actuellement sur un projet avec une interface Excel qui nécésite l'utilisation d'une dll en C++ pour la partie calcul et d'une dll en C# pour la partie accès à la base de données ( sous SQLServer2005)

    Pour la partie dll en C++, nous utilisons une bibliothèque de classe sous visual studio 2005, et on peut on a pu vérifier que Excel utilise bien cette dll : on peut facilement faire une macro qui utilise les fonction de cette dll.

    Le problème que je n'arrive pas à résoudre est lorsque dans la dll en C++, je fais un appel à une fonction qui appartient à ma dll en C# (même lorsque cette fonction n'accède pas à la base de donnée): tout compile, mais à l'exécution, Excel plante.

    Quelqu'un peut-il m'aider??

    voici un exemple de code en C# :
    namespace appels_BD
    {
        public class Acces_Lecture_BD
        {
            public int donne_entier()
            {
                return 5;
            }
        }
    }


    code de la dll en C++ :
    using namespace appels_BD;
    namespace dll_en_cpp {

           //cette fonction marche
            int _stdcall additionne(int a, int b){
                int c=a+b;
                return c;
            }
         
            // cette fonction ne marche pas :(
            int _stdcall additionne_avec_dll_en_csharp(int a, int b){
                Acces_Lecture_BD aa;
                int c=aa.donne_entier();
                return a+b;
            }

    }

    et voici le .def associé a la dll en C++:
    LIBRARY    "dll_en_cpp"
    EXPORTS
    additionne @1
    additionne_avec_dll_en_csharp @2



    samedi 24 février 2007 17:55

Toutes les réponses

  • 1. C++ fonctionne mieux avec VisualBasic 

       Excel en natif supporte Visual Basic

    Si vous pouvez traduire votre code C# en Visual Basic ce sera mieux et plus simple

    Visual Studio vous aide a le faire

    2. Vous gardez votre dll C# mais appelez la dans une classe C++ que vous mettez dans la dll

    vous manipulerez juste C++ au niveau de Excel mais C++ appelera C# pour les Bases de Donnees

    mardi 26 juin 2012 09:19
  • Acces_Lecture_BD aa;
                int c=aa.donne_entier();

    Heu, il est où le gcnew ?

    Je ne vois, dans votre code, aucune référence à du code managé.

    Utilisez un débuggeur pour avoir plus d'informations lors du crash.


    Paul Bacelar, Ex - MVP VC++

    jeudi 28 juin 2012 10:59
    Modérateur