Comment creer une DLL Active X utilisant MS Comm Control

jdinfo - 2 août 2012 à 23:45
 jdinfo - 3 août 2012 à 22:49
Bonsoir,

je cherche a créer une DLL Active X pour communiquer avec des outils via des ports série
mais cette dll ne contient aucun formulaire et ne fait que répondre aux appels
est il possible d'y ajouter MS Comm Control

merci.

7 réponses

NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
3 août 2012 à 01:13
Bonjour,

Tu peux lui ajouter une Form qui sera juste LOADée, mais pas affichée.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
0
Bonjour,

de la même manière je serait donc en mesure d'utiliser un timer ?
et d'utiliser ces classes form1.mycomm et form1.mytimer
depuis mon module de classe ?
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
3 août 2012 à 16:03
Bonjour,

Oui, plus ou moins directement, mais tu pourras récupérer les évènements.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
0
Merci,
ça me laisse penser que je suis sur la bonne piste, question timer j'ai contourné le probléme en gérant moi même un time-out en comparant le time() début et l'actuel avec DateDiff("s"....)
par contre coté comm quand je lance l'appli pas a pas après avoir envoyé ma requete au périphérique je vois bien arriver sa réponse dans la variable Mycomm.input le souci c'est quand je veut l'affecter a ma chaine résultat pfff tout s'évapore
Input se vide InputLen passe a 0 mais ma chaine reste vide !

as tu une idée ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
3 août 2012 à 18:05
Bonjour,

Quel codes utilises tu ?
Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
0
celui ci (c'est encore un peu le fouillis désolé)

Option Explicit


Dim bal1 As New Balance
Dim test As String

Dim Time_start As Variant
Dim Time_cur As Variant


Dim texte As String
Dim ret As Variant
Private mycomm As Object


Private Buffer As Variant 'String
Private Lgbuffer As Integer
Private reponse As String
Dim i As Integer


Public Const Time_out As Long = 10


Sub Main()

'comm_container.Show

'With bal1
'.port = 3
'.refart = "article"
'.reflot = "lot"
'.typepesee = "T"
'test = .reponse
'End With

Set mycomm = CreateObject("MSCommLib.Mscomm")
'Set Mycomm = comm_container.Mycomm

mycomm.CommPort = 3  'port  'on utilise le port passé en argument
mycomm.Handshaking = 0
mycomm.RThreshold = 0
mycomm.InBufferSize = 1024
mycomm.DTREnable = False
mycomm.RTSEnable = False
mycomm.EOFEnable = False
mycomm.Settings = "9600,N,8,1"
mycomm.SThreshold = 1
mycomm.InputMode = 0
mycomm.PortOpen = True

If mycomm.PortOpen = True Then
 'MsgBox ("Port com ouvert")
Else
 MsgBox ("Port com pas ouvert ")
End If

'MsgBox (Mycomm.Settings)

Stop

Buffer = ""
Time_start = Time()

envoi:

DoEvents

texte = ""
mycomm.Output = Chr$(1) + Chr$(13) + Chr$(10) 'i200_soh
'Mycomm.Output = vbCrLf    'i200_crlf
'MSComm1.Input Text
'Text = "Coucou " + Chr$(13) + Chr$(10) + Text

       Do While mycomm.OutBufferCount
          ret = DoEvents()
          Time_cur = Time()
          If DateDiff("s", Time_start, Time_cur) > Time_out Then
             Select Case MsgBox("Impossible de transmettre les données", 34)
                ' Annuler.
                Case 3
                     MsgBox ("Erreur envoi au port com")
                     Exit Sub
                ' Réessayer.
                Case 4
                   Time_start = Time()
                ' Ignorer.
                Case 5
                   Exit Do
             End Select
          End If
       Loop

'Ret = DoEvents()

'mycomm.InputLen = 0
Buffer = mycomm.Input
Lgbuffer = Len(Buffer)

'Buffer = ""
'For i = 0 To Mycomm.InputLen
'  Buffer = Buffer + Mycomm.Input(i)
'Next i


'lgbuffer = Mycomm.InBufferCount
If Lgbuffer = 0 Then
  Time_cur = Time()
  If DateDiff("s", Time_start, Time_cur) > Time_out Then
    MsgBox ("Erreur time out dépassé " + Str(Time_cur) + " / " + Str(Time_start))
    Exit Sub
  End If
  GoTo envoi
Else
   Do
     Buffer = Buffer & mycomm.Input
     Lgbuffer = mycomm.InBufferCount
   Loop Until Lgbuffer = 0
End If

If Not InStr(Buffer, vbCrLf) Then GoTo envoi

mycomm.PortOpen = False

reponse = texte
'reponse = refart + "/" + reflot + "/" + typepesee + "/" + valpesee + "/" + dsd




End Sub

0
Bonsoir,

bizarrement (enfin bizarre pour moi !) en faisant suivre le output par le input
ça solutionne mon problème, j'ai juste rajouté un sleep pour contourner le fait que
ma machine est plus rapide qu'un périph rs232 lire_com:

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

lecture_commande = Chr$(1) + Chr$(5) + query_bloc + "L" + Chr$(13) + Chr$(10) 'i200_soh
mycomm.Output = lecture_commande
Sleep (50)
Buffer = mycomm.Input


et avec le

Set mycomm = CreateObject("MSCommLib.Mscomm")


pas besoin de formulaire

je pense que je suis sauvé

merci
0
Rejoignez-nous