Création dll port serie c# framework 1.1 [Résolu]

Signaler
Messages postés
135
Date d'inscription
mercredi 8 novembre 2000
Statut
Membre
Dernière intervention
11 mai 2007
-
Messages postés
223
Date d'inscription
mardi 27 mai 2003
Statut
Membre
Dernière intervention
3 juin 2019
-
Bonjour,


Apres de longues recherches sur le NET je n'ai toujours pas trouver de document sur le Sujet.


Je cherche a faire une dll en C# pour controler un afficheur par l'intermédiaire d'un port série.


Merci de me donnez des informations si vous en avez.

13 réponses

Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
36
Salut, l'attribut DllImport c'est seulement pour les fonctions contenues dans des librairies non-managées ( non .NET ).

Tu dois ajouter ta DLL à ton projet puis inséré le using correspondant au namespace dans lequel sont contenues tes fonctions et si ta fonction n'est pas statique il faut bien sûr créer un objet de la classe avant de pouvoir l'utiliser.

using MyNamespace;

MyClass mc = new MyClass( );
mc.MyFunction( );
Messages postés
135
Date d'inscription
mercredi 8 novembre 2000
Statut
Membre
Dernière intervention
11 mai 2007
1
MErci pour le renseignement .

En effet, j'ai trouvé une solution assez simple.

Je rajoute la dll a mon projet en tant que référence.
dans ma dll les fonctions doivent etre déclaré en public Static.

ensuite je rajoute le using correspondant au namespace de ma dll.

puis j'appelle les fonctions de ma dll comme suit :

nomdunamespace.nomdelaclasse.nomdelafonction();

Ca marche , no probleme.
Messages postés
1107
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
10 juillet 2018
4
Va faire un tour sur codeproject, il y a quelques exmples (en .NET 1.1)
dont celui-ci :
http://www.codeproject.com/dotnet/DotNetComPorts.asp

Regarde aussi en VB.NET ça peut aussi aider.
Messages postés
135
Date d'inscription
mercredi 8 novembre 2000
Statut
Membre
Dernière intervention
11 mai 2007
1
Merci je vais regarder, si tu as d'autres infos je suis preneur !
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
36
Salut,

1 ) Le composant COM nommé mscomm.ocx ( C'est pas la meilleure solution ).

2 ) Utiliser PInvoke pour appeler les fonctions de Windows :

http://msdn.microsoft.com/msdnmag/issues/02/10/NETSerialComm/default.aspx

3 ) En .NET 2.0 la classe SerialPort.
Messages postés
135
Date d'inscription
mercredi 8 novembre 2000
Statut
Membre
Dernière intervention
11 mai 2007
1
Merci pour ses informations tres pertinente Lutinore.

Aurai-tu un exemple de code ?
Messages postés
135
Date d'inscription
mercredi 8 novembre 2000
Statut
Membre
Dernière intervention
11 mai 2007
1
Comme j'utilise le .NET 1.1 je vais suivre ton conseil et utiliser PInvoke .

Aurai-tu un exemple de Code ?
Messages postés
135
Date d'inscription
mercredi 8 novembre 2000
Statut
Membre
Dernière intervention
11 mai 2007
1
Comment faire pour utiliser PInvoke ? dois-je ajouter une référence, si oui laquelle ?
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
36
P/Invoke c'est le mécanisme pour appeler des méthodes qui ne sont pas en code managé, il s'agit de créer des prototypes de fonctions et de marshaler ( convertir ) les paramètres entre le code managé et non-managé. Dans le lien précédent que je t'ai donné, tu n'auras pas besoin d'écrire ses prototypes, Microsoft l'a déja fait, c'est les méthodes qui commencent avec l'attribut [ DllImport(.. ) ].

L'espace de nom pour P/Invoke c'est :

using System.Runtime.InteropServices;

Si tu veux en savoir plus sur P/Invoke :

http://msdn2.microsoft.com/fr-fr/library/26thfadc.aspx

Pour tout savoir sur le port serie  ( avec quelques code en .NET ) :

http://www.lvr.com/serport.htm
Messages postés
135
Date d'inscription
mercredi 8 novembre 2000
Statut
Membre
Dernière intervention
11 mai 2007
1
J'ai trouvé une solution : je crée une form et j'ajoute le composant
MSComm, celui ci permet une communication avec un port série.

J'arrive a controler mon afficheur pas de probleme.


Maintenant j'aimerai faire une dll, le probleme c'est que je ne peux
pas (ou je ne sais pas) comment ajouter ce composant s'il n'y a pas de
form.

J'ai essayé d'initialiser directement le composant dans le code mais j'ai une exception a l'exécution.

Comment faire ?


Please help
Messages postés
135
Date d'inscription
mercredi 8 novembre 2000
Statut
Membre
Dernière intervention
11 mai 2007
1
Je progresse petit a petit .


J'ai réussi a créer les fonctions que je veux dans ma form. Mon
probleme maintenant c'est de mettre ces fonctions dans une classe a
part dans un autre projet afin de créer une dll , pour l'inclure a mon
programme de test (form) .


Voici ma fonction dans la form :


private void Reset(object sender, System.EventArgs e)

        {

            Byte [] Temp = {0x10};

            com.Output = Temp;//Temp;

        }


Dans la dll je n'ai pas de composant com, il faut que je retourne
simplement la valeur du buffer !! euh oui mais comment retourner la
valeur du buffer , de facon a utiliser celle ci dans ma form ??
Messages postés
135
Date d'inscription
mercredi 8 novembre 2000
Statut
Membre
Dernière intervention
11 mai 2007
1
Bon j'avance petit a petit.


Je crois etre sur la bonne voie , voici ma fonction dans la dll :


public Byte[] Reset()

        {

            Byte [] Temp = {0x10};

            return Temp;//com.Output = Temp;//Temp;

           

        }


Ensuite j'ajoute en la référence de ma dll que j'ai créer au projet de mon application.

Apres pour utiliser une fonction je sais pas trop comment faire.


est-ce que il est possible de juste faire un using nomdemadll; ???

et apres de faire :

nomdemadll.Class1.nomdemafonction


Apparemment ca marche pas mais ptetre qu'il me manque un truc.


Sinon je pensai faire :

[DllImport("libafficheur.dll")]

extern Byte[] Reset();

this.Reset()


Mais a aussi un probleme
Messages postés
223
Date d'inscription
mardi 27 mai 2003
Statut
Membre
Dernière intervention
3 juin 2019
1
Et si tu veux utiliser la fonction
public void Openuart()
{
serialport1.baudrate =9600;
}

dans une classe UART
d'un namespace ESSAI,
sachant que le serial port est sur la form1.
Je n'arrive pas depuis ma classe UART à acceder au serialport1 de ma form1.
Merci