IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VC++ .NET Discussion :

'System::Reflection::Assembly'*: une classe déclarée comme 'abstract' ne peut pas être instanciée


Sujet :

VC++ .NET

  1. #1
    Membre averti
    Profil pro
    Resp dev
    Inscrit en
    Novembre 2002
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Resp dev

    Informations forums :
    Inscription : Novembre 2002
    Messages : 18
    Par défaut 'System::Reflection::Assembly'*: une classe déclarée comme 'abstract' ne peut pas être instanciée
    Bonjour,

    Sous visual studio c++ 2010 je cherche à compiler une dll, qui à pour objectif de charger une assembly.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Assembly assembly = Assembly.LoadFrom("madll.dll");
    Le problème est que le compilateur me jette :
    error C3622: 'System::Reflection::Assembly'*: une classe déclarée comme 'abstract' ne peut pas être instanciée.
    Avez vous une idée du problème?

    Merci.

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 446
    Par défaut
    MSDN :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public:
    static Assembly^ LoadFrom(
    	String^ assemblyFile
    )
    C'est une référence managée Assembly^,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Assembly assembly = ...
    pas un vulgaire objet C++ ayant un constructeur de copie.

  3. #3
    Membre averti
    Profil pro
    Resp dev
    Inscrit en
    Novembre 2002
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Resp dev

    Informations forums :
    Inscription : Novembre 2002
    Messages : 18
    Par défaut
    Merci. C'est beaucoup mieux ainsi.
    C'est la premier fois que j'écris du MC++ d'où mes lacunes.

    J'en profite pour vous demander : je dois utiliser une interface qui est déclaré dans une dll.

    Je crois savoir qu'il faut l'ajouter en tant que référence dans le projet. C'est ce que j'ai fait. Mais je ne parviens pas à compiler car le programme je connais pas le nom de ma classe.

    J'ai essayé d'include "using <madll.dll>" mais le compilateur ne trouve pas.

    Avez vous une idée?

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 446
    Par défaut
    C'est du C++/CLI, le Managed C++ n'est plus depuis déjà un certain temps.

    Avec VS2010, c'est du C++/CLI (à moins d'utiliser le flag proche de "/oldSyntaxe", et là, elle pique vraiment les yeux, cette syntaxe ).

    Il faut bien distinguer les concepts de dll, d'assembly et de namespace.

    Un assembly est une unité de packaging de composant logiciel .NET. Ce package est très souvent, mais pas forcement, constitué d'une seule dll.

    Pour pouvoir utiliser "directement" une classe ou une interface qui est définie dans un assembly, il faut la référencé dans le projet du code qui l'utilise. C'est l'équivalent de l'inclusion d'un .h dans le stdafx.h ET de l'ajout de la lib associée dans les options de l'éditeur de lien, dans le cas d'une utilisation du librairie statique ou dynamique en C++ "standard".
    Pour faire ce référencement dans un projet sous VS2010, cela ce fait par un click droit sur le projet dans l'explorateur de solution, choisir "References..." dans le menu contextuel, cliquer sur le bouton "Add New Reference..." et choisir dans les différents onglets affichés en fonction du type de référence.
    Utilisez l'onglet "Browse" si l'assembly à utiliser est fourni sous forme de dll.
    Utilisez l'onglet "Projects" si l'assembly à utiliser est le résultat de la compilation d'un autre projet dans la solution VS2010.

    Cette opération permet d'utiliser les types définis dans l'assembly, mais il ne faut pas oublier que chaque type est défini dans un espace de nom, qui n’est forcement le nom de la dll contenant l’assembly. Le concept d'espace de nom .NET est exactement le même que celui du C++ standard.

    Comme en C++ standard, déclare seulement que les types définis dans l'espace de nom toto seront accessible directement sans écrire l'espace de nom.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // pas de using
    System::Reflection::Assembly^ assembly1 = System::Reflection::Assembly.LoadFrom("madll.dll");
     
    using namespace System::Reflection;
     
    // après using namespace 
    Assembly^ assembly2 = Assembly.LoadFrom("madll.dll");
    Cela n'ajoute d'aucune manière une référence à un assembly, comme "using namespace std;" ne dispense pas d'inclure les .h de la stl en C++.

Discussions similaires

  1. Réponses: 7
    Dernier message: 27/02/2015, 12h59
  2. Réponses: 13
    Dernier message: 09/03/2013, 19h12
  3. System . Reflection . Assembly
    Par olivier1209 dans le forum VB.NET
    Réponses: 3
    Dernier message: 07/02/2013, 16h48
  4. [API Reflection] Supprimer une classe du cache
    Par aurelienDC dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 13/04/2009, 19h25
  5. [Reflection]parser une classe de java.
    Par burkan21 dans le forum API standards et tierces
    Réponses: 9
    Dernier message: 02/12/2005, 21h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo