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 :

Appeler une DLL C++ en C# ? (Edit : Problème avec une COMException)


Sujet :

C#

  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 54
    Par défaut Appeler une DLL C++ en C# ? (Edit : Problème avec une COMException)
    Bonjour,

    Pour un algo de vérification sur des données cryptées, une dll écrite en C++ était historiquement utilisée sur une plateforme en ASP. Maintenant que l'application tourne sous .Net (ASP/C#), je dois pouvoir réutiliser certaines de ces fonctions, et je me vois pas recoder le tout en C#.

    J'ai regardé du côté du DLLImport et de l'interopérabilité mais il me semble quasi obligatoire de la modifier en rajoutant des directives dans le code de la dll, le problème c'est que les sources de cette dernière (dans un projet VS plus ancien visiblement) ne compilent pas du tout. Est-ce qu'il y aurait un moyen de contourner ce problème?

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Tu l'utilisais comment avant ? En VB ? Si oui fais voir comment les fonctions étaient déclarées dans le code VB

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 54
    Par défaut
    Elle était utilisée en ASP (pas .Net), voici le code :

    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
    Function ValidateToken(sToken, sErrMessage)
      Dim oHvsXMLSecurity: Set oHvsXMLSecurity = Server.CreateObject("Harvest.HvsXMLSecurity.1.0")
     
      If Request("PLANET_TOKEN") <> "" Then oHvsXMLSecurity.setConfigFile("HvsXMLSecurity_parametres_TOKEN.xml")
      If Request("PLANET_TOKEN_MISC") <> "" Then oHvsXMLSecurity.setConfigFile("HvsXMLSecurity_parametres_TOKENMISC.xml")
     
      Dim sDecoded: sDecoded = oHvsXMLSecurity.getDecodeRBON(sToken)
      Dim lResult: lResult = oHvsXMLSecurity.getLastErrorID()
     
       If lResult = 0 Then
        ValidateToken = true
        sErrMessage = ""
      Else
        ValidateToken = false
        sErrMessage = "Last error : " & oHvsXMLSecurity.getLastError() & "; ID = " & lResult
      End If
      Set oHvsXMLSecurity = Nothing
    End Function

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Ah OK, donc c'est une DLL COM...

    Dans ton projet, va dans "Ajouter une référence", sélectionne l'onglet COM, et choisit la DLL dans la liste (si elle n'y est pas, va la chercher directement dans le dossier où elle se trouve). Ca va créer un wrapper .NET pour la DLL COM, que tu pourras utiliser à partir du code C#

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 54
    Par défaut
    Merci énormément, j'ai lutté une bonne partie de la journée là-dessus et maintenant je n'ai plus qu'à faire un HvsXMLSecurityLib.CHvsXMLSecurityClass xmls = new HvsXMLSecurityLib.CHvsXMLSecurityClass(); visiblement...

    Je vais aller adapter le reste du code maintenant mais ça va être plus simple

  6. #6
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 54
    Par défaut
    J'ai rencontré un petit souci lors de l'exécution de mon code, qui est maintenant le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    HvsXMLSecurityLib.CHvsXMLSecurityClass xmls = new HvsXMLSecurityLib.CHvsXMLSecurityClass();
    xmls.setConfigFile(@"C:\HvsXMLSecurity_parametres_TOKEN.xml");
    xmls.getDecodeRBON(token);
    Lorsqu'il exécute la première de ces lignes, la COMException est levée :
    La récupération de la fabrique de classe COM pour le composant avec le CLSID {5808B362-C864-4AB5-BE82-5972C2762DF0} a échoué en raison de l'erreur suivante : 80040154.
    Une idée de la provenance de cette exception?

    Merci d'avance.

    Edit : Résolu en enregistrant la dll avec la commande regsvr32 Nomdema.dll

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

Discussions similaires

  1. [Exécution] Problème avec une DLL
    Par poukill dans le forum C++
    Réponses: 20
    Dernier message: 28/08/2008, 19h47
  2. Problème avec une DLL construite en Delphi
    Par steph_1 dans le forum Langage
    Réponses: 6
    Dernier message: 24/01/2008, 10h01
  3. Problème avec une Dll
    Par nnj dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 19/04/2007, 19h36
  4. Problème avec une DLL dans une boucle For
    Par BraDim dans le forum Langage
    Réponses: 5
    Dernier message: 20/09/2005, 12h22
  5. Problème avec une DLL
    Par SER dans le forum Langage
    Réponses: 7
    Dernier message: 23/08/2005, 13h58

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