Help and Support

Numéro d'article: 158008 - Dernière mise à jour: mardi 13 juillet 2004 - Version: 3.1

Comment faire pour utiliser MSCOMM32.OCX pour transférer des données sur DBCS Windows

Sommaire

Agrandir tout | Réduire tout

Résumé

Cet article illustre quelques techniques de l'utilisation du contrôle MSComm32.OCX pour recevoir et transmettre des données binaires en double-byte character définie (sur deux octets DBCS) Windows.

Plus d'informations

Le contrôle de communications, MSCOMM32.OCX, fournit des communications série pour votre application en permettant la transmission et la réception de données via un port série où uniquement une chaîne de caractères dans le tampon de transmission est autorisée. Cette fonctionnalité vous limite à transmettre uniquement les fichiers basé sur du texte.

Les données binaires doivent être converti un octet à la fois à un caractère et ensuite transmis. Lorsque des reçus, les données doivent être converties d'un caractère en données binaires un octet à la fois. Consultez la section références ci-dessous pour plus d'informations.

Sur double-byte character jeu Windows, tel qu'un coréen, japonais et chinois de Windows, données binaires sont être endommagées si une des valeurs binaires correspond à un caractère de prospect DBCS. Le contrôle MSComm interpréter cet octet et l'octet suivant comme un caractère codés sur deux octets et renvoie un octet du caractère ASCII équivalent. Pour résoudre ce problème, qui est spécifique à Windows de jeux de caractères codés sur deux octets, vous pouvez implémenter certains algorithmes de codage qui peuvent convertir des données binaires dans des données de texte et vice versa. Cet article explique comment convertir des données binaires un octet vers taille ASCII de trois caractères pour conserver le caractère de prospect. À la fin de réception, ces caractères ASCII trois sont convertis en données binaires de 1 octet. Par exemple :
ASC('A') = 97 ' 97

s'être transmis sous la forme de trois caractères :
'0''9''7'

Remarque : le code exemple est lecture du fichier entrée en tant que fichier binaire. Il n'est pas nécessaire convertir chaque caractère en valeur.

Si vous utilisez un modem au lieu de câble RS-232, vous devez ajouter des codes pour établir la connexion modem. Par exemple :
  • MSComm1.Output = 'ATDT 999-9999' pour émetteur

    et -
  • MSComm1.Output = 'AT' pour réception
Une fois la connexion est établie, tout ce que doit fonctionnent de la même façon.

Avertissement : Utilisation de la CODE de SAMPLE PROVIDED du présent ARTICLE est EXPOSÉ YOUR propre. Microsoft fournit cet exemple de code « en l'état » sans garantie d'aucune sorte, expresse ou implicite, notamment les garanties implicites de qualité marchande et/ou d'adéquation à un usage particulier.

Exemple de code - émetteur

  1. Démarrez Visual Basic. Si Visual Basic déjà exécute, du fichier menu, cliquez sur Nouveau projet. Form1 est créé par défaut.
  2. Placez le contrôle de communication Microsoft sur Form1. Si contrôle communication Microsoft est introuvable dans la barre de contrôle, accédez menu Outils, choisissez des contrôles personnalisés et ensuite vérifier le contrôle de communication Microsoft dans la zone de liste.
  3. Ajoutez le code suivant à la section Déclarations générales de Form1 :
          ' General Declaration section
    
           Dim Offset As Long
           Dim FileData As Byte
           Dim FileName As String
    
    						
  4. Ajoutez le code suivant à l'événement Load de Form1 :
          ' Load event of Form
          ' 28800 baud, no parity, 8 data, and 1 stop bit.
          ' In RS-232, maximum speed of 28800 baud can be used
    
          Private Sub Form_Load()
              MSComm1.Settings = "28800,N,8,1"
              MSComm1.InputLen = 1
              MSComm1.CommPort = 2
              MSComm1.PortOpen = True
    
          ' Change the file path to point to the file you want to transfer
              FileName = "d:\sample.hlp"
    
              Offset = 1
              Open FileName For Binary Access Read As #1
          End Sub
    
    						
  5. Ajoutez le code suivant à l'événement OnComm de MSComm1 :
          ' ONCOMM event of Comm OLE Control
          ' The following code is needed to make sure that next set of
          ' characters can be transmitted (CommEvent = 2 is triggered from the
          ' receiver side)
    
          Private Sub MSComm1_OnComm()
              If MSComm1.CommEvent = 2 Then
                  temp = MSComm1.Input
                  If Offset <= FileLen(FileName) Then
                      Get #1, Offset, FileData
                      q = FileData
                      MSComm1.Output = Format(q, "000")
                      Offset = Offset + 1
                  End If
              End If
          End Sub
    
    						
  6. Ajoutez le code suivant à l'événement de déchargement de Form1 :
          ' UnLoad event of Form
    
          Private Sub Form_Unload(Cancel As Integer)
              Close #1
          End Sub
    
    						
  7. Assurez-vous que les propriétés MSComm1 sont modifiés comme suit :
          RThreshold = 1     ' triggers when at least one char is on the buffer
          SThreshold = 3
    
    						

Exemple de code - réception

  1. Démarrez Visual Basic. Si Visual Basic déjà exécute, du fichier menu, cliquez sur Nouveau projet. Form1 est créé par défaut.
  2. Placez le contrôle de communication Microsoft sur Form1. Si contrôle communication Microsoft est introuvable dans la barre de contrôle, accédez menu Outils, choisissez des contrôles personnalisés et ensuite vérifier le contrôle de communication Microsoft dans la zone de liste.
  3. Ajoutez un bouton de commande à Form1. Command1 est créé par défaut.
  4. Ajoutez le code suivant à la section Déclarations générales de Form1 :
          ' General Declaration section
    
          Dim ByteCount As Long
          Dim FileData As Byte
    
    						
  5. Ajoutez le code suivant à l'événement Load de Form1 :
          ' Load event of Form
          ' 28800 baud, no parity, 8 data, and 1 stop bit.
    
          Private Sub Form_Load()
              MSComm1.Settings = "28800,N,8,1"
              MSComm1.InputLen = 3
              MSComm1.CommPort = 1
              MSComm1.PortOpen = True
    
          ' Change the file path to point to the file you want to store
              Open "c:\sample.txt" For Binary Access Write As #1
    
          End Sub
    
    						
  6. Ajoutez le code suivant à l'événement OnComm de MSComm1 :
          ' OnComm event
    
          Private Sub MSComm1_OnComm()
              If MSComm1.CommEvent = 2 And MSComm1.InBufferCount > 0 Then
                  FileData = CInt(MSComm1.Input)
                  ByteCount = ByteCount + 1
                  Put #1, ByteCount, FileData
                  MSComm1.Output = Chr$(26)
              End If
          End Sub
    
    						
  7. Ajoutez le code suivant à l'événement Click de Command1 :
          ' CLICK event of button
    
          Private Sub Command1_Click()
              MSComm1.Output = Chr$(26)
          End Sub
    
    						
  8. Ajoutez le code suivant à l'événement de déchargement de Form1 :
          ' UnLoad even of Form
    
          Private Sub Form_Unload(Cancel As Integer)
              Close #1
          End Sub
    
    						
  9. Assurez-vous que les propriétés MSComm1 sont modifiés comme suit :

    RThreshold = 3
Les codes émetteur et le récepteur doivent être compilés séparément et placés sur deux ordinateurs distincts où un ordinateur est l'émetteur désigné et autre celui est le destinataire.

La technique événementiel génère un événement OnComm lorsqu'il y a en attente dans le tampon d'entrée de caractères. En outre, la propriété CommEvent contient un numérique 2. Pour l'événement OnComm être déclenché, vous BoîteContrôle la propriété Rthreshold une valeur autre que par défaut de zéro. La valeur courante de la propriété RThreshold est 1, ce qui signifie que le OnComm événement est déclenché si un minimum d'un caractère est en attente dans le tampon d'entrée. Dans cet article, le 3 numérique est utilisé comme une valeur de propriété RThreshold car 3 caractères à la fois sont envoyés.

Références

Pour plus d'informations, consultez l'article suivant dans la Base de connaissances :
194923  (http://support.microsoft.com/kb/194923/EN-US/ ) comment caractères de contrôle interruption l'utilisation du contrôle MSComm

Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Visual Basic Control Creation Edition
  • Microsoft Visual Basic 5.0 Édition initiation
  • Microsoft Visual Basic 5.0 Édition professionnelle
  • Microsoft Visual Basic 5.0 Édition Entreprise
  • Microsoft Visual Basic 4.0 Édition professionnelle
  • Microsoft Visual Basic 4.0 16-bit Enterprise Edition
  • Microsoft Visual Basic 4.0 32-Bit Enterprise Edition
Mots-clés : 
kbmt kbctrl kbhowto kbintldev KB158008 KbMtfr
Traduction automatiqueTraduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 158008  (http://support.microsoft.com/kb/158008/en-us/ )
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Traductions disponibles