DLLImport Au Secours !!!!!!! [Résolu]

cs_blueangel 69 Messages postés samedi 4 janvier 2003Date d'inscription 19 mars 2009 Dernière intervention - 11 août 2005 à 12:06 - Dernière réponse : sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention
- 12 août 2005 à 14:39
Bonjour tout le monde ,
Voila je veux créer une DLL en c# le pb c'est que cette dll fait référence à une autre DLL ecrite en c++
pour tester le programme j'ai commencer par créer un exe ou j''écrit mon code j'ai ajouter la dll comme référence dans mon projet tout baigne .
Maintenant je veux créer la DLL et là les pbs commence
1-la premiere erreur est : géneration de l'assembly à échoué l'assembly réferencé Interop_MaDLL n'a pas un nom fort (elle n'est pas un assembly)

ça c'est normale parce que apparament .NET créer une DLL d'interoprabilité à partir de laquelle il génére l'exe
2- j'ai fouilliné dans la doc de DLLImport et la
Bon j'ai compris le principe c'est de déclarer les fonction qui existe dans la DLL de cette façon


[DllImport("MaDLL.DLL")]


public static extern void LoadFile (string sPath);


mais au niveau du programme


1-j’utilise des classe issue de cette dll comment je les déclare au niveau de DLLImport


2-comment je déclare les fonctions de ma DLL pour que ça marche


SVP aider moi ça fait trois jour que je suis entrain de fouilliner dans le web et je suis bloqué je débute en .NET et c’est dure !!!!


Merci d’avance pour votre aide

blueangel13
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 12 août 2005 à 09:59
3
Merci
ok bon, on reprend depuis le début... je crois que tu n'as pas tout compris

donc tu retires toutes les références à la dll devise dans ton projet convertion, tu enregistres et tu fermes VS.NET.

- La Première étape consiste à créer une pair de clés pour pouvoir signé ton wrapper.
donc, dans un invité de commande (Visual Studio .NET 2003 Command Prompt), tu te places dans le répertoire que tu souhaites et tu tapes la commandes suivante :
sn -k devise.snk
- Ensuite, il faut que tu crées ton wrapper en utilisant TlbImp et le fichier devise.snk que tu viens de créer, pour cela procède de cette manière :
tlbimp devise.dll /out:Interop.devise.dll /Keyfile:devise.snk

- Maintenant tu ajoutes à ton projet la dll Interop.devise.dll mais pas devise.dll !
- Tu peux ajouter [assembly: AssemblyKeyFile("devise.snk")]

Voila, c'est tout

<HR>
Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate

Merci sebmafate 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 95 internautes ce mois-ci

Commenter la réponse de sebmafate
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 11 août 2005 à 14:30
0
Merci
tu peux faire en sorte que le proxy (wrapper comme tu veux) que tu génères pour ta DLL ait un nom fort.
Pour cela, il faut que donne à la fonction TlbImp un fichier contenant une paire de clé.

Syntax: TlbImp TypeLibName [Options]
Options:
/out:FileName File name of assembly to be produced
/namespace:Namespace Namespace of the assembly to be produced
/asmversion:Version Version number of the assembly to be produced
/reference:FileName File name of assembly to use to resolve references
/publickey:FileName File containing strong name public key
/keyfile:FileName File containing strong name key pair
/keycontainer:FileName Key container holding strong name key pair
/delaysign Force strong name delay signing
/unsafe Produce interfaces without runtime security checks
/nologo Prevents TlbImp from displaying logo
/silent Suppresses all output except for errors
/verbose Displays extra information
/primary Produce a primary interop assembly
/sysarray Import SAFEARRAY as System.Array
/transform:TransformName Perform the specified transformation
/strictref Only use assemblies specified using /reference
/? or /help Display this usage message

<HR>
Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate
Commenter la réponse de sebmafate
cs_blueangel 69 Messages postés samedi 4 janvier 2003Date d'inscription 19 mars 2009 Dernière intervention - 11 août 2005 à 15:39
0
Merci
Merci pour ta réponse
Est ce que l'outil Type Library Importer permet de créer un assembly à partir d'une DLL ???
voila j'ai exécuté la commande

C:\WINDOWS\system32>TlbImp Interop.devise.dll /out:Interop.devise.dll
Microsoft (R) .NET Framework Type Library to Assembly Converter 1.1.4322.573
Copyright (C) Microsoft Corporation 1998-2002. All rights reserved.


TlbImp error: The input file 'C:\WINDOWS\system32\Interop.devise.dll' is n
ot a valid type library
peux tu me préciser quel type de clés lettre et elles servent à quoi ces clés??
Merci

blueangel13
Commenter la réponse de cs_blueangel
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 11 août 2005 à 16:11
0
Merci
en fait, ca se passe en 2 étapes :
1. Génération de la paire de clés :
sn -k tonfichierKey.snk

2. Génération du Wrapper
TlbImp devise.dll /out: Interop.Devise.dll /keyfile:tonfichierKey.snk

maintenant, il ne te reste plus qu'à importer ta dll dans le projet

<HR>
Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate
Commenter la réponse de sebmafate
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 11 août 2005 à 16:15
0
Merci
PInvoke ( DllImport etc.. ) c'est pour les librairie natives pas pour les objets COM et tlbimp.exe c'est pour générer un wrapper COM, mais si ton objet COM n'a pas de librairie de type là c'est pas gagné.

tlbimp.exe s'utlise sur la librairie COM par sur le wrapper.
Commenter la réponse de Lutinore
cs_blueangel 69 Messages postés samedi 4 janvier 2003Date d'inscription 19 mars 2009 Dernière intervention - 11 août 2005 à 16:53
0
Merci
Excusez moi mais
l'objet réferencé dans mon projet "conversion"qui est une DLL est
1-devise.dll c'est un objet COM je l'ai ajouté comme référence au niveau du projet conversion
2-devise.dll est un objet COM écrit en C++
3-quand je compile conversion.dll il y a une dll qui est crée dans "c:\ Documents\Visual Studio Projects\Conversion\obj\Interop.devise.dll" alors que ma dll s'apelle conversion.dll.
pour le moment tout se passe bien
Maintenant je veux créer un objet COM à partir de ma conversion.dll
donc je génére le fichier clé en tapant dans le prompt
c:\windows\system32 sn-k conversion.dll.

Microsoft (R) .NET Framework Strong Name Utility Version 1.1.4322.573
Copyright (C) Microsoft Corporation 1998-2002. All rights reserved.


Paire de clés écrite dans conversion.snk

4-je copie le fichier dans conversion.snk dans c:\ Documents\Visual Studio Projects\Conversion\obj\debug"
5-j'ajoute dans le fichier AssemblyInfo.cs de mon projet le code suivant

[assembly: AssemblyKeyFile("conversion.snk")]

5- là le probléme survient une erreur de compilation survient qui dit
La génération de l'assembly a échoué -- L'assembly référencé 'Interop.devise' n'a pas un nom fort
donc je peux plus créer le composant COM conversion.dll que je vais utiliser dans un autre projet
je sais plus comment procéder j'ai fait ce que vous m'a dit seb mais ça marche toujours pas !!!!
Merci!!!

blueangel13
Commenter la réponse de cs_blueangel
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 11 août 2005 à 18:15
0
Merci
Désolé je ne sais pas, j''utilise souvent tlbimp.exe mais j'ai jamais eu besoin de signer mes wrappers COM, je croyais même que c'etait reservé pour les PIA, càd signé par l'éditeur uniquement..
Commenter la réponse de Lutinore
cs_blueangel 69 Messages postés samedi 4 janvier 2003Date d'inscription 19 mars 2009 Dernière intervention - 12 août 2005 à 13:17
0
Merci
Merci Seb c'était bien ça qu'il fallait faire !!!

blueangel13
Commenter la réponse de cs_blueangel
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 12 août 2005 à 14:39
0
Merci
faudrait que je pense à faire un tuto la dessus...
quand j'aurais un peu de temps


<HR>
Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate
Commenter la réponse de sebmafate

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.