PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : port.dll und c++



Farnsworth
03.05.2005, 22:31
Hallo!

Ich schreibe gerade in borland C++, und möchte mit der seriellen Schnittstelle arbeiten.
In der Schule Kommuniziere ich mit dem PC und dem 8051, allerdings immer via sendbyte() und readbyte() mittels der Port.dll auf der PC seite.

zu Hause habe ich die header datei angepasst das die rts und txd ... steuerleitungen auch gehen (sollen).
In der Referenz der port.dll ist es genau beschrieben, aber bei mir ändern sich die Zustände nicht.

rts(0);
txd(0); Das schreibe ich ins Hauptprogramm, aber die Zustände bleibe
dtr(0); auf 11V


Die Deklaration in der com.cpp sieht wie folgt aus:
#include <vcl.h>

HINSTANCE hdll; //hinstance ist ein Variablentyp der API Ebene
typedef UINT(CALLBACK *open)(char *); //eigener Datentyp kreirt (Zeigerdatentyp auf eine Funktion)
//Open ist der Name Zeiger auf Char muß übergeben werden,
//unsigned int wird zurück geliefert.
//Callback bringt das Betriebssystem ins Spiel
open opencom; //Variable des neuen Datentyps wird angelegt ( Typ open)

typedef UINT (CALLBACK *read)();
read readbyte;

typedef (CALLBACK *send)(UCHAR); //5 mal für die 5 Funktionen die wir brauchen
send sendbyte;

typedef (CALLBACK *close)();
close closecom;

typedef (CALLBACK *time_)(UINT);
time_ timeout;

typedef WORD (CALLBACK *dsr_)();
dsr_ dsr;

typedef WORD (CALLBACK *rts_)(WORD);
rts_ rts;

typedef WORD (CALLBACK *txd_)(WORD);
txd_ txd;

typedef WORD (CALLBACK *dtr_)(WORD);
dtr_ dtr;
//Die funktionen müssen mit den existierenden Funktionen verknüpft werden
//-----------------------------------------------------
bool ladeDLL (void) {
hdll = LoadLibrary("PORT.DLL");
if(hdll == NULL)
{
return false; //wenn false, dann datei nicht gefunden
}
else
{
opencom = (open)GetProcAddress(hdll,"OPENCOM"); //übergebe den handle auf die Datei
readbyte = (read)GetProcAddress(hdll,"READBYTE"); //Beim aufruf in c wird dann die funktion in der dll ausgeführt
sendbyte = (send)GetProcAddress(hdll,"SENDBYTE");
closecom = (close)GetProcAddress(hdll,"CLOSECOM");
timeout = (time_)GetProcAddress(hdll,"TIMEOUT");
rts = (rts_)GetProcAddress(hdll,"RTS");
txd = (txd_)GetProcAddress(hdll,"TXD");
dtr = (dtr_)GetProcAddress(hdll,"DTR");
return true;
}
}




Wäre Super wenn mir da jemand helfen könnte, ich probiere schon seit Stunden.

Danke