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

C# Discussion :

Chargement fichier DLL défectueux.Traitement fichier Json


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2018
    Messages : 19
    Par défaut Chargement fichier DLL défectueux.Traitement fichier Json
    Bonjour.
    Je maîtrise sans doute mal mon sujet mais après de longue recherches, je m'en remet à vous...
    J'essaye de charger une DLL me permettant de "traduire" un document JSON.
    Voici la méthode en question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    public static dynamic Parse(dynamic informations, Message encodedMessage)
            {
                //Console.WriteLine("Parse(string encodedPayload) :");
                //Console.WriteLine("   encodedPayload : " + encodedMessage);
     
     
                Message decodedMessage = encodedMessage;
     
     
     
                var myAssembly = Assembly.LoadFile("C:\L.dll");
                //var myType = myAssembly.GetType("DLL.MyType");
                var myType = myAssembly.GetType("DLL.MCS1608");
                //ISensor myInstance = (ISensor)Activator.CreateInstance(myType, informations.SoftwareVersion, encodedMessage.Payload);
                ISensor myInstance = (ISensor)System.Activator.CreateInstance(myType, encodedMessage.Payload);
                var payload = myInstance.decodedPayload();
                var isConfig = myInstance.isConfiguration();
                var isNewConfig = myInstance.isNewConfiguration();
     
                dynamic msg = new JObject();
                msg.DeviceId = decodedMessage.DeviceId;
                msg.Payload = payload;
                msg.Rssi = decodedMessage.Rssi;
                msg.Snr = decodedMessage.Snr;
                msg.Timestamp = decodedMessage.Timestamp;
                msg.IsConfiguration = isConfig;
                msg.IsNewConfiguration = isNewConfig;
     
                Console.WriteLine("   decodedMessage : " + msg.ToString());
                return msg;
            }
    En fait, d'après l'exception qui en résulte, tout se passe bien jusqu'à la création de l'instance.
    Voici le message d'erreur :
    System.ArgumentNullException: Value cannot be null.
    Parameter name: type
    at System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
    at System.Activator.CreateInstance(Type type, Object[] args)
    Et je ne le comprend pas trop, en principe mon instance n'est pas nul.

    Auriez vous une idée plus efficace pour charger un fichier DLL dans un dossier, et utiliser les fonction de celui-ci pour traiter mon document Json ?

  2. #2
    Membre Expert
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 941
    Par défaut
    C'est tout simplement que myAssembly.GetType("DLL.MCS1608"); te renvoie null parce-qu'il ne trouve pas de classe "DLL.MCS1608" dans l'assembly "C:\L.dll". Tu as peut-être mal orthographié le nom de la classe, ou son namespace. Il serait intéressant de savoir d'où vient cette dll et pourquoi tu ne peux pas l'intégrer dans ton projet, via un package NuGet par exemple. Sinon tu peux aussi intégrer une library disponible sur nuget.org comme newtonsoft.json.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2018
    Messages : 19
    Par défaut
    En fait c'est un projet que je réalise en collaboration avec quelques collègues.
    Je me demande si je n'ai pas des gros problèmes de version de framework à résoudre avant toutes choses.. Toutefois ta réponse m'aide beaucoup !
    La librairie est en faite créée par un collègue et placée dans un dossier partagé.

  4. #4
    Membre Expert
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 941
    Par défaut
    D'accord, je comprends un peu mieux, j'imagine qu'il s'agit d'un projet de groupe en formation. Néanmoins tu aurais probablement intérêt à ajouter une référence à cette dll dans ton projet, ça te permettra de voir tous les types disponibles et de les instancier directement dans ton propre code au lieu de passer par de la réflexion. Si vous en avez le temps je vous conseille de jeter un œil à NuGet, c'est une outil qui permet de gérer les dépendances d'un projet.

    Bon courage pour votre projet.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2018
    Messages : 19
    Par défaut
    J'ai déjà beaucoup téléchargé des package via Nuget mais je ne savais pas que ça permettait de gérer ses propres dépendances je vais y jeter un oeil.
    Je vais probablement revenir avec des question, j'ai changé d'angle d'attaque: J'essayais de créer un service windows mais le déboguage de celui ci est difficile. je vais tout faire dans une application console .net Framework dans un premier temps afin de pouvoir analyser le tout en déboguage pas à pas ...

  6. #6
    Membre Expert
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 941
    Par défaut
    Tu peux faire un projet console et un projet de service Windows, qui ne contiendront chacun que le code d'infrastructure qui leur est spécifique, et créer à côté un projet de bibliothèque de classes qui contiendra le cœur de tes traitements et sera référencé par les deux autres projets (le tout dans la même solution).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 16/04/2015, 21h50
  2. Réponses: 5
    Dernier message: 10/09/2013, 15h04
  3. [C#] Chargement de DLLs depuis un fichier
    Par BillyKane59 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 24/03/2011, 18h03
  4. [DLL] Utiliser un fichier dll en java
    Par Bourak dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 24/01/2009, 10h22
  5. Processus, DLL, Enlever un fichier DLL
    Par pier* dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 02/05/2006, 11h58

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