Importer DLL VB dans du C#

Signaler
Messages postés
102
Date d'inscription
lundi 23 décembre 2002
Statut
Membre
Dernière intervention
5 juin 2007
-
Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
-
Hello :)

Tout d'abord je tiens à m'excuser au cas où ma question ne serait pas posée au bon endroit, j'ai pas trouvé où la mettre...

Voila mon problème. J'ai une DLL écrite en Visual Basic (et générée par Visual Studio 6).

Je veux pouvoir l'utiliser dans mon code C#. D'après ce que j'ai vu sur le net, il faut écrire un truc genre :
[DllImport("Epub.dll", CharSet=CharSet.Auto)]
public static extern bool Test();

Jusque là, pas de pb, ca compile. Mais si je tente d'acceder à cette fonction, ca me sort une erreur :
Unhandled Exception: System.EntryPointNotFoundException: Unable to find an entry
 point named 'Test' in DLL 'MaDLL.dll'.
   at MaClasse.Test()
   at MaClasse.Main()

Et je comprend pas pourquoi... Ma DLL contient bien une fonction Test qui retourne un booléen...

8 réponses

Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
Salut utilises dumpbin.exe ( dumpbin.exe -exports ) sur ta DLL pour voir le nom dest fonctions contenues. Avec Visual Basic je ne sais pas mais le C++ par xemeple décore le nom  des fonctions.. si c'est le cas elle sera accessible avec le nom décoré ou avec son index ( EntryPoint = "#1" )
Messages postés
102
Date d'inscription
lundi 23 décembre 2002
Statut
Membre
Dernière intervention
5 juin 2007
1
Hum...

Dump of file Epub.dll

File Type: DLL

  Section contains the following exports for Epub.dll

           0 characteristics
    45B625C9 time date stamp Tue Jan 23 16:12:09 2007
        0.00 version
           1 ordinal base
           4 number of functions
           4 number of names

    ordinal hint RVA      name

          1    0 00001D52 DllCanUnloadNow
          2    1 00001D26 DllGetClassObject
          3    2 00001D3C DllRegisterServer
          4    3 00001D10 DllUnregisterServer

  Summary

        1000 .data
        1000 .reloc
        1000 .rsrc
        2000 .text

Aucune trace de mes fonctions oO
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
C'est du COM ça.. tu ne peux pas utiliser P/Invoke ( DllImpot ). Essaye simplement d'ajouter ta DLL à ton projet pour voir..
Messages postés
104
Date d'inscription
mercredi 4 mai 2005
Statut
Membre
Dernière intervention
27 juin 2007
3
Salut je sais pas si tu a toujours besoin d'un coup de main:

En fait dans VS tu fais "Ajouter References" ,Normalement une boite de dialogue apparait :Tu selection l'onglet "browse" et tu selectionne ta dll.

Normalement ta dll est ajouter a ton projet dans un repertoire "bin" + une interop...

Ensuite pour l'appeler dans ton code tu fais :

Using   Nom_de_la_dll;

et dans ton code:

Nom_de_la_dll   madll = new  Nom_de_la_dll ( )

ou

Nom_de_la_dll:Nom_delaClasse   madll = new  Nom_de_la_dll ( )

En esperant aue ca d'aidera

A plus
Messages postés
104
Date d'inscription
mercredi 4 mai 2005
Statut
Membre
Dernière intervention
27 juin 2007
3
Correction:

Nom_de_la_dll   madll = new  Nom_de_la_dll ( )
ou

Nom_de_la_dll.Nom_delaClasse   madll = new  Nom_de_la_dll ( )

Mais je pense que tu avais compris
Bon courage
Messages postés
4
Date d'inscription
mardi 13 février 2007
Statut
Membre
Dernière intervention
1 décembre 2008

hayine
Messages postés
2
Date d'inscription
jeudi 9 avril 2009
Statut
Membre
Dernière intervention
21 novembre 2009

salut j'espère que ma réponse vous aidera!!!
tout d'abord il faut ajouter une référence dans ton projet project -> add reference
ensuite vous choisirez browse et vous ajouter le dll en question
une fois cette tache est finie
vous pourez utiliser votre dll comme etant une bibliotheque importée(using madll)
et enfin vous pouvez creer une instance de cettte dll:
madll objetexemple = new madll();
et vous pouvez encore utiliser les differents services offerts pad cette dll
a++++++++++++++++
Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
49
Beeessem, tout d'abord, cette réponse a déjà été donnée, de plus, ce message date de janvier 2007 :)

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé ! -