Eingebundenes Header will nicht



  • Ok, jetzt versteh ich gar nichts mehr: Ich habe noch eine Header-Datei importiert namens port.h die so aussieht

    #ifndef _PORT_H_
    #define _PORT_H_
    
    #define TIME_SCALE	1000000
    
    #ifndef INT_MAX
    #define INT_MAX		2147483647
    #endif
    #ifndef INT_MIN
    #define INT_MIN		(-INT_MAX - 1)
    #endif
    
    typedef unsigned char BYTE;
    typedef unsigned char Boolean;
    
    #ifndef TRUE
    #define TRUE 1
    #endif
    #ifndef FALSE
    #define FALSE 0
    #endif
    #ifndef Boolean_DEFINED
    #define Boolean_DEFINED
    typedef unsigned char Boolean;
    #endif
    #ifndef MAX
    #define MAX(a,b) (((a)>(b))?(a):(b))
    #endif
    #ifndef MIN
    #define MIN(a,b) (((a)<(b))?(a):(b))
    #endif
    #ifndef ABS
    #define ABS(a)	(a < 0)?(-a):(a)
    #endif
    #ifdef WIN32
    #define VSNPRINTF	_vsnprintf
    #define ALLOCA(cb)	_alloca(cb)
    #define SNPRINTF	_snprintf
    #else
    #define VSNPRINTF	vsnprintf
    #define ALLOCA(cb)	alloca(cb)
    #define SNPRINTF	snprintf
    #endif
    
    extern void errprintf(char *fmt, ...);
    
    enum DeviceTypes
    {
    	DEVTYPE_UNKNOWN,
    	DEVTYPE_FILE,
    	DEVTYPE_SERIAL232,
    	DEVTYPE_SERIALUSB,
    	DEVTYPE_SERIALI2C,
    	DEVTYPE_SERIALPS2,
    	DEVTYPE_PARPORT,
    	DEVTYPE_PCI,
    	DEVTYPE_AGP,
    	DEVTYPE_PIDE,
    	DEVTYPE_SATA,
    	DEVTYPE_SCSI,
    	DEVTYPE_USER
    };
    
    class MDevice
    {
    	protected:
    	int	m_devtype;
    };
    #endif
    

    Wie man sehen kann gibt es eine Klasse MDevice wenn ich also dadrüber #define _MEDVICE_ einfüge. Verschwindet der Fehler in der main-Funktion ich bekomme aber einen neuen:

    class K8055 : public IOBoard
    {
    	protected:
    	Boolean	m_fopen[K8055_NCARDS];
    	Boolean m_fdirty[K8055_NCARDS];
    	Boolean	m_fBulkWrite;
    	Boolean m_fBulkRead;
    ....
    

    In den zweiten Zeile gibt es die Fehlermeldung:
    error: expected class-name before ‘{’ token



  • Dann ist die Klasse IOBoard nicht bekannt.



  • Jetzt hab ichs fast, es war falsch die Header-Datei local einzubinden(#include "blabla"), ich musste sie so einbinden: #include <blabla>

    Jetzt bekommen ich noch den Fehler:
    /usr/local/include/k8055.h error: ‘Boolean’ does not name a type
    Ich vermute das liegt daran, dass der boolsche Datentyp bei mir schlicht bool heißt. Ich hab jetzt natürlich wenig Lust alle booleans in der Bibliothek rauszusuchen gibt es dafür ein Compileranweisung?



  • typedef bool Boolean;
    

    aber schön ist das nicht, mach lieber ein find&replace



  • Ok, danke hat geholfen Boolean stand zwar nicht für bool wie ich zuerst dachte sonder für "unsigned char", aber das Problem ist umschifft mein Programmcode sieht jetzt so aus:

    #include <iostream>
    #include <k8055.h>
    
    int main(){
    	int addr =  OpenDevice(0);
    	int AnalogChn1 = ReadAnalogChannel(1);
    	std::cout << "Kontakt aufgenommen. Addr.: " << addr << std::endl 
    				<< "Wert Analog-Kanal 1: " << AnalogChn1;
    	CloseDevice();
    	return 0;
    }
    

    und ich bekomme jetzt diese Fehlermeldungen:
    undefined reference to CloseDevice' main.cpp line 9 undefined reference toOpenDevice' main.cpp line 5



  • Also ich komm hiermit nicht weiter. Vielleicht hat ja jemand Lust sich die Sources der Bibliothek runterzuladen, sie auszuprobieren und mir zu sagen was ich falsch machen.
    http://www.mohawksoft.org/?q=node/15
    Wäre nett. 🙂



  • So, nachdem ich schon fast aufgegeben hatte (siehe oben)hab ich nun eine C-Bibliothek gefunden mit der es geht,JUHU. Danke nochmal.



  • Hallo, Ihr Fachleute !

    Benötige Hilfe beim Ansprechen des K8055D: Beim "CloseDevice();" erhalte ich die
    Fehlermeldung: "Die Ausnahme "Unbekannter Softwarefehler" (0x0eedfade) in der Anwendung ander Stelle 0x77ef142 aufgetreten." Ansonsten macht das Programm alles, was es soll....

    Die entscheidenden Teile meines Programmlistings sind:

    #include "K8055D.h"
    #include <windows.h> // for DLL usage
    #include <iostream>
    #include <time.h>

    ....

    int main()
    {
    int status;
    long int A1_in = -1; long int A2_in = -1;
    int D1_in; int z1; int z2;

    // Karte 0 öffnen

    cout << "\nOeffne Karte 0...";
    status = OpenDevice( 0 );
    if ( status < 0 )
    {
    cout << "\nFehler beim Oeffnen der Karte";
    return -1;
    }

    ....

    // Karte schließen

    CloseDevice;
    warte( 1000 );
    return EXIT_SUCCESS;
    }

    Könnt Ihr mir helfen, meinen Blindflug zu beenden ?



  • Ja, der Fehler liegt ziemlich sicher IN deiner Funktion CloseDevice(). (ich hoffe mal, die fehlenden Klammern sind beim Abtippen entstanden)



  • Danke für den Tipp ! Allerdings waren die Klammern die Ursache noch nicht. Diegleiche Fehlermeldung erscheint noch immer. Ich forsche also weiter:

    * "inaktuelle DLL" ?...
    * "DLL wieder freigeben" ?...

    Habe auch schon einige progs aus WWW für das K8050D-Board probiert. - Diegleiche Fehlermeldung tritt bei denen teilweise auch auf.

    BIN FUER JEDEN TIPP DANKBAR.



  • Fehler behoben !
    Ursache war eine fehlerhafte DLL von Vellemann. Er stellt selber eine korrigierte auf seiner Webseite zur Verfügung:

    http://www.velleman.be/be/de/download/files/ ; k8055_dll_2_001.zip

    Damit läuft alles glatt.


Anmelden zum Antworten