Sie sind auf Seite 1von 2

Basierend auf dem Beispiel in DBusDrv.

Example:
VDBusPortHandle port;
// open the COM1 port with address 4
if (dbusOpenPort( VDBUS_COM1, 4, &port ) == VDBUS_SUCCESS) {
...
// send a frame
dbusSendFrame( port, 1, data, dataSize );
...
// check, if we have received something
VDBusFrameInfo info = { sizeof(VDBusFrameInfo) };
if (dbusGetFrameInfo( port, &info ) == VDBUS_SUCCESS) {
BYTE data[20];
ULONG count;
if (dbusGetFrameData( port, data, sizeof(data), &count ) {
// handle message data here
...
}
}
...
}
dbusClosePort( port );
}

Die Deklaration DBUSDRV_API deklariert zum einen eine exportierte DLL-Funktion (


__declspec(dllexport) ), zum anderen die Aufrufskonventionen (WINAPI). Diese besagen, dass die
Parameter im Pascal-Stil übergeben werden.

Auszug aus MSDN:

Microsoft Specific

The __pascal, __fortran, and __syscall calling conventions are no longer supported. You can emulate
their functionality by using one of the supported calling conventions and appropriate linker options.

WINDOWS.H now supports the WINAPI macro, which translates to the appropriate calling convention
for the target. Use WINAPI where you previously used PASCAL or __far __pascal.

dbusOpenPort()
Die Umsetzung der Aufzählung VDBusPortId dürfte kein Problem darstellen. Generell werden Aufzählungen
in C/C++ als vorzeichenbehaftete 32-Bit-Ganzzahlen hinterlegt.
Der Datentype ULONG (unsigned long integer) ist eine vorzeichenlose 32-Bit-Ganzzahl.
Neben der Konfiguration liefert diese Funktion ein DBUSPortHandle. Dieses Handle muss bei jedem weiteren
Aufruf mitgegeben werden, damit die DLL weiß, mit welchem Port gearbeitet wird. Dieser Wert ist eine
Receive-Variable (in/out) und wird mit „Call-By-Reference“ übergeben.

busSendFrame()
Port, ULONG bereits beschrieben
Void* Zeiger auf Datenpuffer
dbusGetFrameInfo()
Port, bereits beschrieben
FrameInfo Zeiger auf Datenstruktur, Call by Reference
Generell bei Datenstrukturen Alignment beachten… Alle Elemente sind ULONG, es findet kein Padding statt.

Alignemnt / Padding:
I.d.R. wird das Alignment auf gerade Adressen eingestellt, d.h. zwischen einem Byte-Element, das auf einer
geraden Adresse liegt und einem größeren Datenelement wird ein Füllbyte (Padding Byte) eingefügt.

dbusGetFrameData()
alles bereits beschrieben
ULONG retCopyCount ist Rückgabewert, also „call by reference“

dbusClosePort()
Port wie gehabt

Das könnte Ihnen auch gefallen