VBCom32.DLL


Dynamik link library zur Kommunikation mit den COM-Ports (COM1 ...).
Die DLL ermöglicht nicht nur das Senden von Kommandos oder Strings an
die COM-Ports, sondern auch die Überwachung von Ports in einer
resourcenschonenden Weise.
Der Schwerpunkt bei der Programmierung lag nicht in der Speedoptimierung,
dieses ist sowieso von den Ports abhängig, sondern in der einfachen Handhabung
und sicherem Umgang mit den COM-Ports.

Installation

Bei der VBCom32.DLL handelt es sich um eine Standard 32Bit DLL. Die
DLL muß vor deren Verwendung nicht registriert werden!
Es genügt die DLL in das Windows System-Verzeichnis zu kopieren. Im
Fall von Windows 9x in Windows/System oder unter den NT's in
Winnt/System32.

Verwendung

Die DLL ist Freeware. Sie dürfen die DLL frei verwenden und weitergeben.
Die Veröffentlichung der DLL zum Download und/oder die Verbreitung auf
Programmsammlungen (bekannt als Zeitschriften-CD's) bedarf jedoch der
ausdrücklichen Zustimmung durch den Programmautor.
Sie verwenden die Software auf eigenes Risiko. Der Programmautor übernimmt
keine Haftung für evtl. Hard- oder Softwareschäden oder Datenverluste.


D i e   F u n k t i o n e n

ComGetDLLVersion

Mit dieser Funktion können Sie zur Laufzeit die Version der DLL abfragen. Momentan
gibt die Funktion zurück: 352. Diese Zahl steht für die Version: 0.3.52.

Deklaration:

Private Declare Function ComGetDLLVersion Lib "vbcom32" () AS LONG

Parameter:

keine

Rückgabewerte:

Long. Eine Zahl, die für die aktuelle DLL-Version steht.

ComGetConnectString

Ein "Connectstring" setzt sich aus den folgenden Parametern zusammen:

PortNr;Baudrate;Bits;Parität;StopBits

Ein solcher String wird zum Öffnen eines ComPorts benötigt. Mittels dieser
Funktion können Sie jederzeit abfragen, mit welchem "Connectstring" ein
Port geöffnet wurde. Sie benötigen dazu lediglich den Handle: hCom, den
die ComOpen()-Funktion zurück gibt.

Deklaration:

Private Declare Function ComGetConnectString Lib "vbcom32" _
(BYVAL hCom AS LONG, lpBuffer AS STRING) AS LONG

Parameter:

[in] hCom:   Long. Handle des geöffneten COM-Ports.
[out] lpBuffer: String. Eine initialisierte Stringvariable, in der der Connectstring abgelegt wird.

Rückgabewerte:

Im Fehlerfall 0. Success ist größer als 0.

Anwendungsbeispiel:

Dim sBuffer As String

sBuffer = Space(50)
If ComGetConnectString(hCom, sBuffer) Then
MsgBox sBuffer
End If

ComGetComName

Haben Sie einen Handle auf einen geöffneten Com-Port, so gibt Ihnen diese Funktion
einen String zurück, auf welchen Port der Handle zeigt: Com1, Com2 ... etc.

Deklaration:

Private Declare Function ComGetComName Lib "vbcom32" _
(BYVAL hCom AS LONG, lpBuffer AS STRING) AS LONG

Parameter:

[in] hCom:   Long. Handle des geöffneten COM-Ports.
[out] lpBuffer: String. Eine initialisierte Stringvariable, in der der Name des Ports abgelegt wird.

Rückgabewerte:

0, wenn z.B. der Handle nicht mehr gültig ist oder ungleich 0 im Erfolgsfall.

Anwendungsbeispiel:

Dim sBuffer As String

sBuffer = Space(5)
If ComGetComName(hCom, sBuffer) Then
MsgBox sBuffer
Else
Msgbox "Der angegebene Handle ist nicht mehr gültig."
End If

ComSetEventMask

Diese Funktion gehört zu der Funktionsgruppe in der DLL, die für die Überwachung von
Com-Ports zuständig ist. Standardmäßig wird ein Port nach RxCHAR überwacht - also
das Event, wann ein Byte in den RxBuffer des Com-Ports eintrifft. Mittels dieser
Funktion ist es möglich die Standardeinstellung zu verändern, so dass die Überwachung
auf andere Events des Com-Ports gesetzt werden kann.

Deklaration:

Private Declare Function ComSetEventMask Lib "vbcom32" _
(BYVAL hCom AS LONG, BYVAL nFlags AS LONG) AS LONG

Parameter:

[in] hCom:   Long. Handle des geöffneten COM-Ports.
[in] nFlags: Eine der nachfolgenden Konstante:

Private Const EV_BREAK = &H40
Private Const EV_CTS = &H8
Private Const EV_DSR = &H10
Private Const EV_ERR = &H80
Private Const EV_RING = &H100
Private Const EV_RLSD = &H20
Private Const EV_RXCHAR = &H1
Private Const EV_RXFLAG = &H2
Private Const EV_TXEMPTY = &H4

EV_BREAK: Ein Unterbrechungssignal wurde empfangen.
EV_CTS: Das Clear-To-Send Signal ändert den Status
EV_DSR: Das Data-Set-Ready Signal ändert den Status
EV_ERR: Line-Status zeigt Fehler.
EV_RING: Es hat geklingelt :) Ring-Indikator entdeckt.
EV_RLSD: Das Receive-Line-Signal-Dectect ändert den Status
EV_RXCHAR: (default) Ein Byte ist im RxBuffer eingetreten.
EV_RXFLAG: Ein spezielles Event-Zeichen (definierbar) wurde empfangen.
EV_TXEMPTY: Das letzte Byte aus dem Transmit-Buffer wurde gesendet.

Rückgabewerte:

Ungleich 0 wenn die Funktion erfolgreich ausgeführt werden konnte.

Anwendungsbeispiel:

Wake on Com-Port ;)

Private Const EV_RING = &H100

hCom = ComOpen("1;19200;8;0;1")
hThread = ComStart(hCom, AddressOf ComCallBackFunc, 0)
ComSetEventMask hCom, EV_RING

Modul:

Function ComCallBackFunc(Byval hCom AS LONG, lpBuffer As STRING, Byval nLen As Long) AS LONG
MsgBox "Es hat geklingelt ..."
ComStop hThread
ComClose hCom
End Function

Anmerkung: Statts ComSetEventMask hätte EV_RING auch als Flag der ComStart-Funktion
mitgegeben werden können. ComSetEventMask wird nur benötigt, wenn die Überwachung während
einer Überwachung auf ein anderes Event gesetzt würde.

ComGetXOutFlow

Zustand des XOFF Signals, true oder false, des Transmitbuffers. Hat ein Sender das XOFF signal auf
True gesetzt wird die Datenübertragung angehalten, bis der Empfänger ein XON-Signal sendet.

Deklaration:

Private Declare Function ComGetXOutFlow Lib "vbcom32" _
(BYVAL hCOM AS LONG) AS LONG

Parameter:

[in] hCom:   Long. Handle des geöffneten COM-Ports

Rückgabewerte:

True: Das XOFF Signal des Transmitbuffers ist gesetzt
False: (default) Das XOFF Signal ist nicht gesetzt.

ComSetXOutFlow

Setzt den Zustand des XOFF Signals, true oder false, des Transmitbuffers. Hat ein Sender das XOFF signal auf
True gesetzt wird die Datenübertragung angehalten, bis der Empfänger ein XON-Signal sendet.

Deklaration:

Private Declare Function ComSetXOutFlow Lib "vbcom32" _
(BYVAL hCOM AS LONG, Byval nFlag AS LONG) AS LONG

Parameter:

[in] hCom:   Long. Handle des geöffneten COM-Ports
[in] nFlag: Entweder True oder False

Rückgabewerte:

Der bisherige Zustand:
True: Das XOFF Signal des Transmitbuffers ist gesetzt
False: (default) Das XOFF Signal ist nicht gesetzt.

ComGetXInpFlow

Entspricht der ComGetXOutFlow-Funktion. Nur dieses Mal ist es der Rxbuffer.

ComSetXInpFlow

Entspricht der ComSetXOutFlow-Funktion. Nur dieses Mal ist es der Rxbuffer.

ComGetTXQue

Gibt die Anzahl der noch vorhandenen, nicht gesendeten, Bytes, im Transmitbuffer
zurück.

Deklaration:

Private Declare Function ComGetTXQue Lib "vbcom32" _
(BYVAL hCOM AS LONG) AS LONG

Parameter:

[in] hCom:   Long. Handle des geöffneten COM-Ports

Rückgabewert:

Anzahl noch vorhandener Bytes im Sendebuffer (Transmitbuffer).

ComGetTXBuffer

Gibt die Größe des Transmitbuffer
zurück.

Deklaration:

Private Declare Function ComGetTXBuffer Lib "vbcom32" _
(BYVAL hCOM AS LONG) AS LONG

Parameter:

[in] hCom:   Long. Handle des geöffneten COM-Ports

Rückgabewert:

Gesamtgröße des Sendebuffers in Byte.

ComSetTXBuffer

Setzt die Gesamtgröße des Sendebuffers neu.

Deklaration:

Private Declare Function ComSetTXBuffer Lib "vbcom32" _
(BYVAL hCOM AS LONG, BYVAL nBytes AS LONG) AS LONG

Parameter:

[in] hCom:   Long. Handle des geöffneten COM-Ports
[in] nBytes: Neue Größe des Sendebuffers

Rückgabewert:

Bisherige gesamtgröße des Sendebuffers in Byte.

ComGetStop

Gibt die Anzahl der Stop-Bits zurück.

Deklaration:

Private Declare Function ComGetStop Lib "vbcom32" _
(BYVAL hCOM AS LONG) AS LONG

Parameter:

[in] hCom:   Long. Handle des geöffneten COM-Ports

Rückgabewerte:

0 = (default) 1 Stop Bit
1 = 1.5 Stop Bits
2 = 2 Stop Bits

ComSetStop

Setz die Anzahl der Stop-Bits.

Deklaration:

Private Declare Function ComSetStop Lib "vbcom32" _
(BYVAL hCOM AS LONG, Byval nStopB AS LONG) AS LONG

Parameter:

[in] hCom:   Long. Handle des geöffneten COM-Ports
[in] nStopB: Anzahl der stop Bits

Rückgabewerte:

Bisherige Anzahl der stop Bits
0 = (default) 1 stop Bit
1 = 1.5 stop Bits
2 = 2 stop Bits

ComGetRXQue

Entspricht genau der ComGetTXQue-Funktion, betrifft dieses Mal den Empfangsbuffer.

ComGetRXBuffer

Entspricht genau der ComGetTXBuffer-Funktion, betrifft dieses Mal den Empfangsbuffer.

ComSetRXBuffer

Entspricht genau der ComSetTXBuffer-Funktion, betrifft dieses Mal den Empfangsbuffer.

ComGetRTSFlow

Gibt den Zustand des RTSD-Signals zurück.

Declaration:

Private Declare Function ComGetRTSDFlow Lib "vbcom32" _
(BYVAL hCOM AS LONG) AS LONG

Parameter:

[in] hCom:   Long. Handle des geöffneten COM-Ports

Rückgabewerte:

0 = Disable
1 = Enable
2 = Handshake
3 = Toggle

ComSetRTSFlow

Gibt den Zustand des RTSD-Signals zurück.

Declaration:

Private Declare Function ComSetRTSDFlow Lib "vbcom32" _
(BYVAL hCOM AS LONG, BYVAL nFlag AS LONG) AS LONG

Parameter:

[in] hCom:   Long. Handle des geöffneten COM-Ports
[in] nFlag: Neuer Zustand des RTSD-Signals

Rückgabewerte:

Bisheriger Zustand:
0 = Disable
1 = Enable
2 = Handshake
3 = Toggle

ComGetRLSD

Gibt True zurück, wenn des Receife-Line-Signal-Detect empfangen wurde.

Deklaration:

Private Declare Function ComGetRLSD Lib "vbcom32" _
(BYVAL hCOM AS LONG) AS LONG

Parameter:

[in] hCom:   Long. Handle des geöffneten COM-Ports

Rückgabewerte:

0 oder ungleich 0, wenn True.

ComGetRing

Gibt True zurück, wenn der Ring-Indikator empfangen wurde.

Deklaration:

Private Declare Function ComGetRing Lib "vbcom32" _
(BYVAL hCOM AS LONG) AS LONG

Parameter:

[in] hCom:   Long. Handle des geöffneten COM-Ports

Rückgabewerte:

0 oder ungleich 0, wenn True.

ComGetParityType

Gibt zurück, auf welche Parität der Com-Port gesetzt ist.

Deklaration:

Private Declare Function ComGetParityType Lib "vbcom32" _
(BYVAL hCOM AS LONG) AS LONG

Parameter:

[in] hCom:   Long. Handle des geöffneten COM-Ports

Rückgabewerte:

0 = (default) keine Parität
1 = ODD
2 = Even
3 = Mark
4 = Space

ComSetParityType

Setzt die Parität des COM-Ports

Deklaration:

Private Declare Function ComSetParityType Lib "vbcom32" _
(BYVAL hCOM AS LONG, BYVAL nParity AS LONG) AS LONG

Parameter:

[in] hCom:   Long. Handle des geöffneten COM-Ports
[in] nParity: Einen Wert für die Parität

Rückgabewerte:

Die bisherige Einstellung der Parität:
0 = (default) keine Parität
1 = ODD
2 = Even
3 = Mark
4 = Space

ComGetParityChar

Gibt das Zeichen zurück, bei dem die Paritätsprüfung erfolgt. Hierzu muss ParityType auf 3 (Mark) gesetzt
sein.

Deklaration:

Private Declare Function ComGetParityChar Lib "vbcom32" _
(BYVAL hCOM AS LONG) AS LONG

Parameter:

[in] hCom:   Long. Handle des geöffneten COM-Ports

Rückgabewert:

ASCII-Wert des Zeichens.

ComSetParityChar

Setzt das Zeichen, bei dem die Paritätsprüfung erfolgt. Hierzu muss ParityType auf 3 (Mark) gesetzt
sein.

Deklaration:

Private Declare Function ComSetParityChar Lib "vbcom32" _
(BYVAL hCOM AS LONG, BYVAL nParityASCII AS LONG) AS LONG

Parameter:

[in] hCom:   Long. Handle des geöffneten COM-Ports
[in] nParityASCII: ASC-Wert des Zeichens zur Paritätsprüfung

Rückgabewert:

Bisheriger ASCII-Wert des Zeichens.

ComGetParity

True oder False ob die Paritätsprüfung eingeschaltet ist oder ausgeschaltet.

Deklaration:

Private Declare Function ComGetParity Lib "vbcom32" _
(BYVAL hCOM AS LONG) AS LONG

Parameter:

[in] hCom:   Long. Handle des geöffneten COM-Ports

Rückgabewert:

0 = deaktiviert, ungleich 0 aktiviert.

ComSetParity

Hiermit kann die Paritätsprüfung ein- und/oder ausgeschaltet werden

Deklaration:

Private Declare Function ComGetParity Lib "vbcom32" _
(BYVAL hCOM AS LONG, BYVAL onOff AS LONG) AS LONG

Parameter:

[in] hCom:   Long. Handle des geöffneten COM-Ports
[in] onOFF: True oder False

Rückgabewert:

Bisheriger Zustand der Paritätsprüfung
0 = deaktiviert, ungleich 0 aktiviert.

ComGetNull

True oder False ob die Nullchars ausgeblendet werden

Deklaration:

Private Declare Function ComGetNull Lib "vbcom32" _
(BYVAL hCOM AS LONG) AS LONG

Parameter:

[in] hCom:   Long. Handle des geöffneten COM-Ports

Rückgabewert:

0 = deaktiviert, ungleich 0 aktiviert.

ComSetNull

True oder False ob die Nullchars ausgeblendet werden

Deklaration:

Private Declare Function ComSetNull Lib "vbcom32" _
(BYVAL hCOM AS LONG, BYVAL nDiscard AS LONG) AS LONG

Parameter:

[in] hCom:   Long. Handle des geöffneten COM-Ports
[in] nDiscard: True oder False

Rückgabewert:

Bisheriger Zustand:
0 = deaktiviert, ungleich 0 aktiviert.

ComGetDTRLine

True oder False ob Linededect ein- oder ausgeschaltet wird

Deklaration:

Private Declare Function ComGetDTRLine Lib "vbcom32" _
(BYVAL hCOM AS LONG) AS LONG

Parameter:

[in] hCom:   Long. Handle des geöffneten COM-Ports

Rückgabewert:

0 = deaktiviert, ungleich 0 aktiviert.

ComSetDTRLine

True oder False ob Linededect ein- oder ausgeschaltet wird

Deklaration:

Private Declare Function ComSetDTRLine Lib "vbcom32" _
(BYVAL hCOM AS LONG, Byval nDTR AS LONG) AS LONG

Parameter:

[in] hCom:   Long. Handle des geöffneten COM-Ports
[in] nDTR: True oder False

Rückgabewert:

Bisheriger Zustand des Signals.
0 = deaktiviert, ungleich 0 aktiviert.

ComGetDTRFlow

True oder False ob handshaking durchgeführt wird.

Deklaration:

Private Declare Function ComGetDTRFlow Lib "vbcom32" _
(BYVAL hCOM AS LONG) AS LONG

Parameter:

[in] hCom:   Long. Handle des geöffneten COM-Ports

Rückgabewert:

0 = deaktiviert, ungleich 0 aktiviert.

ComSetDTRFlow

Setzt das handshake Controling

Deklaration:

Private Declare Function ComSetDTRLine Lib "vbcom32" _
(BYVAL hCOM AS LONG, Byval nhshake AS LONG) AS LONG

Parameter:

[in] hCom:   Long. Handle des geöffneten COM-Ports
[in] nhshake: True oder False

Rückgabewert:

Bisheriger Zustand des controlings.
0 = deaktiviert, ungleich 0 aktiviert.

ComGetDSRSens

s. PB Kommentar

Deklaration:

Private Declare Function ComGetDSRSens Lib "vbcom32" _
(BYVAL hCOM AS LONG) AS LONG

Parameter:

[in] hCom:   Long. Handle des geöffneten COM-Ports

Rückgabewert:

0 = low, ungleich 0 heigh.

ComSetDSRSens

S. PB Kommentar

Deklaration:

Private Declare Function ComSetDSRSens Lib "vbcom32" _
(BYVAL hCOM AS LONG, Byval nSens AS LONG) AS LONG

Parameter:

[in] hCom:   Long. Handle des geöffneten COM-Ports
[in] nSens: True oder False

Rückgabewert:

Bisheriger Zustand:.
0 = low, ungleich 0 high.

DSRSens:
TRUE/FALSE Enable DSR sensitivity.  When DSRSENS is enabled, data received by the DTE (computer) is placed into the receive buffer only if DSR is set to logic high.  If DSR is set low, received data is discarded.  Enabling DSRSENS allows DSR to enable or disable the DTE (the computer) to receive data from the DTE (the modem).
DSRSENS is rarely used in practical communications situations.
(PowerBASIC.Inc)

CTS/DSR output flow Controls:

Jeweils True/False:

ComGetDSRFlow

Private Declare Function ComGetDSRFlow Lib "vbcom32" _
(BYVAL hCom AS LONG) AS LONG

ComSetDSRFlow

Private Declare Function ComSetDSRFlow Lib "vbcom32" _
(BYVAL hCom AS LONG, BYVAL nDSR AS LONG) AS LONG

ComGetCTSFlow

Private Declare Function ComGetCTSFlow Lib "vbcom32" _
(BYVAL hCom AS LONG) AS LONG

ComSetCTSFlow

Private Declare Function ComSetCTSFlow Lib "vbcom32" _
(BYVAL hCom AS LONG, BYVAL nCTS AS LONG) AS LONG

PB Kommentar: (CTS oder auch DSR)
TRUE/FALSE Enable CTS output flow control (Input signal).  When CTSFLOW is enabled, it causes the DTE (computer) to stop sending data whenever the CTS signal is set to logic low by the DCE (modem).  Transmission continues when the DCE (modem) sets the CTS signal back to logic high.  The CTS signal is usually used in response to an RTS signal.

ComGetCD

True oder False, ob eine COM-Verbindung  zustande gekommen ist "carrier detect".

Declaration:

Private Declare Function ComGetCD Lib "vbcom32" _
(BYVAL hCOM AS LONG) AS LONG

Parameter:

[in] hCom:   Long. Handle des geöffneten COM-Ports

Rückgabewert:

0 = False, ungleich 0 = True

ComGetByte

Gibt die Anzahl der Bits zurück. Die Zahl kann zwischen 4 und 8 sein.

Declaration:

Private Declare Function ComGetByte Lib "vbcom32" _
(BYVAL hCOM AS LONG) AS LONG

Parameter:

[in] hCom:   Long. Handle des geöffneten COM-Ports

Rückgabewert:

Eine Zahl zwischen 4 und 8 oder 0 im Fehlerfall.

ComSetByte

Gibt die Anzahl der Bits zurück. Die Zahl kann zwischen 4 und 8 sein.

Declaration:

Private Declare Function ComSetByte Lib "vbcom32" _
(BYVAL hCOM AS LONG, BYVAL nBits AS LONG) AS LONG

Parameter:

[in] hCom:   Long. Handle des geöffneten COM-Ports
[in] nBits: Die Anzahl der zu übertragenen Bits. Zwischen 4 und 8

Rückgabewert:

Bisherige Einstellung des Byte - Parameters.
Eine Zahl zwischen 4 und 8 oder 0 im Fehlerfall.

ComGetBreak

True oder false, ob ein Break Signal gesetzt ist

Declaration:

Private Declare Function ComGetBreak Lib "vbcom32" _
(BYVAL hCOM AS LONG) AS LONG

Parameter:

[in] hCom:   Long. Handle des geöffneten COM-Ports

Rückgabewert:

0 = False, True = ungleich 0

ComSetBreak

Setzt einen Break.

Declaration:

Private Declare Function ComSetBreak Lib "vbcom32" _
(BYVAL hCOM AS LONG, BYVAL nBreak AS LONG) AS LONG

Parameter:

[in] hCom:   Long. Handle des geöffneten COM-Ports
[in] nBreak: True oder False

Rückgabewert:

Bisherige Einstellung des Byte - Parameters.
Wert ob ein Break-Signal gesetzt war: Ungleich 0 True, sonst 0.

ComGetBaud

Gibt die momentan eingestellte Baudrate des Com-Ports zurück

Declaration:

Private Declare Function ComGetBaud Lib "vbcom32" _
(BYVAL hCOM AS LONG) AS LONG

Parameter:

[in] hCom:   Long. Handle des geöffneten COM-Ports

Rückgabewert:

Die momentane Baudrate oder 0 im Fehlerfall.

ComSetBaud

Setzt die Baudrate.

Declaration:

Private Declare Function ComSetBaud Lib "vbcom32" _
(BYVAL hCOM AS LONG, BYVAL nBaud AS LONG) AS LONG

Parameter:

[in] hCom:   Long. Handle des geöffneten COM-Ports
[in] nBaud:  Dies können die folgenden Werte sein:

110, 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 38400, 56000, 57600, 115200, 128000, 256000

Rückgabewert:

Die bisher eingestellte Baudrate oder 0 im Fehlerfall.

ComGetWinHandle

Gibt den Handle des geöffneten COM-Ports zurück, der für die WinAPI-Funktionen
benötigt wird. Somit kann auch über die WinAPI-Funktionen auf einen COM-Port
zugegriffen werden.

Declaration:

Private Declare Function ComGetWinHandle Lib "vbcom32" _
(BYVAL hCOM AS LONG) AS LONG

Parameter:

[in] hCom:   Long. Handle des geöffneten COM-Ports

Rückgabewert:

Ein für Windows gültiger Handle oder 0 im Fehlerfall.

ComStop

Hält die asynchrone Überwachung eines COM-Ports an und schließt bzw. terminiert den Thread.

Declaration:

Private Declare Sub ComStop Lib "vbcom32" _
(BYVAL hThread AS LONG)

Parameter:

[in] hThread:   Die ThreadID, die von der ComStart-Funktion zurückgegeben wird.

Jetzt wird's endlich heavy :)

Die Königsfunktion der DLL!

ComStart

Startet die asynchrone Überwachung eines Com-Ports. Die Kontrolle wird sofort dem aufrufenden
Programm zurückgegeben. Die Funktion startet einen background Thread der "still running" läuft. D.h.
der Thread bekommt erst dann Rechenzeit, wenn tatsächlich ein Ereignis am überwachten Com-Port
eintritt! Während der Zeit liegt die CPU-Last bei 0%. Tritt ein Event ein, so wird, wenn auf dieses
genau definierte Event gewartet wurde, eine Callback-Routine, die in einem Modul definiert sein muss,
aufgerufen.

Deklaration:

Private Declare Function ComStart Lib "vbcom32" _
(Byval hCom AS LONG, Byval nAddr AS LONG, Byval nEvent AS LONG) AS LONG

Parameter:

[in] hCom:     Handle des Ports der überwacht werden soll.
[in] nAddr:     Die Addresse der CallbackRoutine, kann mit AddressOf-Operator ermittelt werden
[in] nEvent:    (default 0) Konstante eines Events. Siehe: ComSetEventMask. Wird 0 angegeben,
wird standardmäßig RxCHAR eingestellt.

Rückgabewert:

0 im Fehlerfall oder die ThreadID. Diese müssen Sie gut aufbewahren, da sie für ComClose benötigt wird.
Die ThreadID ist ein Windows-Handle, der auf den "still running" Thread zeigt.

Callbacks:

Die Funktion ruft eine CallBack-Routine auf, die Sie in einem Modul definieren müssen - ansonsten entsteht
ein nichtauffangbarer Laufzeitfehler (Dr. Watson). Diese Callback-Routine hat folgenden grundsätzlichen Aufbau:

Function ComCallBackFunc(Byval hCom AS LONG, lpBuffer AS STRING, Byval nLen AS LONG) AS LONG
... Anweisungen ...
End Function

hCOM: Hier wird zurückgegeben, von welchem Com-Handle das Event ausgelöst wurde
lpBuffer: Die evtl. empfangenen Bytes.
nLen: Die Anzahl der Zeichen, die von diesem Event betroffen waren

W a r n i n g :

Die DLL wird den Thread terminieren, wenn die DLL aus dem Speicher genommen wird - aber: Es gibt unvorhersehbare
Fehlerfälle. Solange der Thread nicht terminiert wurde, hält er am aufrufenden Prozess fest - dies kann dazu führen,
dass VB "einfriert" und sich der Prozess - zwar schon "abgeschossen"  - aber nicht beenden kann, weil da noch ein Thread ist. "still running" bedeutet: Der Thread reagiert auf KEINE AUFFORDERUNG von VB oder Windows!
Der Thread "wacht" nur dann auf, wenn am Com-Port ein Event auftritt. Speichern Sie daher Ihre Arbeit immer vorher,
bevor Sie ComStart() verwenden!!! ComClose wird ebenfalls nach evtl. "offenen" Threads suchen und versuchen sie zu terminieren, so dass Sie ComStop nicht immer verwenden müssen - sondern nur dann, wenn Sie die Überwachung beenden und aber die Kommunikation - senden - etc. fortsetzen wollen.ComStart versetzt Sie in die Lage ein multithreading Programm zu schreiben - demzufolge haben Sie auch eine etwas höhere Sorgfalt was die Terminierung dieser Kernel-Objekte angeht. Seitens der DLL wurde alles erdenkliche getan.
Rufen Sie ComStart() auf, muss die Callbackroutine bereits mit allen Parametern erstellt sein.

ComSend

Überträgt Zeichen zum Transmitbuffer des Com-Ports und sendet sie.

Deklaration:

Private Declare Function ComSend Lib "vbcom32" _
(lpSendString AS STRING, Byval hCOM AS LONG) AS Long

Parameter:

[in] lpSendString: String (Bytes) die Sie senden wollen
[in] hCom: Handle auf einen geöffneten Com-Port.

Rückgabewert:

Anzahl der Zeichen, die die Funktion zu senden versuchte.

ComClose

Schließt einen COM-Port, den Sie mit ComOpen geöffnet haben. ComClose prüft auch, ob auf dem
betreffenden Port ein "still running" Thead gesetzt ist und terminiert diesen ggf. Sie sollten stets alle
Verbindungen zu COM-Ports mit ComClose abschließen. Die DLL wird zwar versuchen, wenn die DLL aus dem Speicher genommen wird, diese zu schließen, jedoch kann nicht gewährt werden, dass dies immer glückt, insbesondere dann
nicht, wenn mehrere Anwendung die DLL instanziiert haben.

Deklaration:

Private Declare Function ComClose Lib "vbcom32" _
(BYVAL hCom AS LONG) AS LONG

Parameter:

[in] hCom: Handle auf einen geöffneten Com-Port.

Rückgabewerte:

Keine. Ggf. müssen Sie den Handle mit einer weiteren Funktion der DLL (siehe oben) auf Gültigkeit prüfen.

Das Herz der DLL

ComOpen

ComOpen öffnet einen Kommunikationskanal mit den auf dem PC vorhandenen Com-Ports. Diese Funktion gibt den Handle auf den Com-Port zurück, den Sie für alle DLL-Funktionen benötigen!!!

Deklaration:

Private Declare Function ComOpen Lib "vbcom32" _
(lpConnectString AS STRING) AS LONG

Parameter:

[in] STRING: ConnectString. Aufbau siehe oben ("PortNr;Baudrate;Bits;Parität;StopBit")

Rückgabewerte:

Ist der Wert > 0 so haben Sie einen gültigen Porthandle. Ansonsten können folgende Werte auftreten:

-1: Kein Connectstring gefunden (DLL geht von Schlamperei aus)
-2: Zuviele oder zuwenig Delimeter (";") im Connectstring
-3: Ein Parameter wurde nicht gefunden.
-4: Falsche Portnummer
-5: Falsche Baudrate angegeben (siehe oben: ComSetBaud)
-6: Anzahl der Bits nicht zwischen 4 und 8
-7: Port konnte aus unbekannten Gründen nicht geöffnet werden.
kleiner als 7: Entspricht einer Fehlernummer von VB für Dateien.

A C H T U N G:

ComOpen akzeptiert im Connectstring, außer den Delimetern, nur ZAHLEN!!! Verwechseln Sie also ein "O" nicht mit einer "0".
ComOpen erstellt einen standard Kommunikationskanal. Möchten Sie weitere Features, so müssen Sie anschließend die dafür erforderlichen Parameter über die verschiedenen DLL ComSet-Funktionen definieren.

ComFullCommand

Diese Funktion öffnet einen Kommunikationskanal, sendet einen String und schließt die Sache augenblicklich wieder.
Sie vereint die Funktionen: ComOpen, ComSend und ComClose in einem Funktionsaufruf.

Deklaration:

Private Declare Function ComFullCommand Lib "vbcom32" _
(lpConnectString AS STRING, lpSendString AS STRING) AS LONG

Parameter:

[in] lpConnectString -> Siehe ComOpen
[in] lpSendString -> Siehe ComSend.

Rückgabewerte:

keine.