cs_blueangel
Messages postés69Date d'inscriptionsamedi 4 janvier 2003StatutMembreDernière intervention19 mars 2009
-
11 août 2005 à 12:06
sebmafate
Messages postés4936Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention14 février 2014
-
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-jutilise 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 cest dure !!!!
sebmafate
Messages postés4936Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention14 février 201437 12 août 2005 à 09:59
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")]
sebmafate
Messages postés4936Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention14 février 201437 11 août 2005 à 14:30
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
cs_blueangel
Messages postés69Date d'inscriptionsamedi 4 janvier 2003StatutMembreDernière intervention19 mars 2009 11 août 2005 à 15:39
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
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 11 août 2005 à 16:15
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.
cs_blueangel
Messages postés69Date d'inscriptionsamedi 4 janvier 2003StatutMembreDernière intervention19 mars 2009 11 août 2005 à 16:53
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!!!
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 11 août 2005 à 18:15
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..