Objekt erstellen



  • Guten Tag,

    Ich arbeite seit heute mit dem Microsoft Visual Studio 2005 und möchte
    ein USB Experimentier Interface ansteuern. Ich habe aber Probleme beim
    erstellen einer neuen Klasse.

    Source Code

    #include "stdafx.h"
    #include "K8055D_C.h"
    
    #define CARD_ADDR	0
    
    //ein Objekt der Klasse K8055D erstellen
    K8055D_C card;
    int result = 0;
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	printf("TEST");
    	getchar();
    	return 0;
    }
    

    ^

    Folgender Fehler passiert:

    Error 1 error C2065: 'K8055D_C' : undeclared identifier h:\visual studio 2005\projects\velleman\velleman\velleman.cpp 17
    Error 2 error C2146: syntax error : missing ';' before identifier 'card' h:\visual studio 2005\projects\velleman\velleman\velleman.cpp 17
    Error 3 error C2065: 'card' : undeclared identifier h:\visual studio 2005\projects\velleman\velleman\velleman.cpp 17

    Wäre cool mir jemand kurz ein paar Tips geben kann



  • Woher hast du denn die "K8055D_C.h"? Womöglich hat die Klasse ja einen anderen Namen als der Header (z.B. CK8055D) oder ist in einem Namespace deklariert.



  • #ifdef __cplusplus
    extern "C" {
    #endif
    
    #define FUNCTION __declspec(dllexport)
    
    FUNCTION long __stdcall OpenDevice(long CardAddress);
    FUNCTION long __stdcall CloseDevice();
    FUNCTION long __stdcall ReadAnalogChannel(long Channel);
    FUNCTION long __stdcall ReadAllAnalog(long *Data1, long *Data2);
    FUNCTION long __stdcall OutputAnalogChannel(long Channel, long Data);
    FUNCTION long __stdcall OutputAllAnalog(long Data1, long Data2);
    FUNCTION long __stdcall ClearAnalogChannel(long Channel); 
    FUNCTION long __stdcall ClearAllAnalog();
    FUNCTION long __stdcall SetAnalogChannel(long Channel); 
    FUNCTION long __stdcall SetAllAnalog();
    FUNCTION long __stdcall WriteAllDigital(long Data);
    FUNCTION long __stdcall ClearDigitalChannel(long Channel);
    FUNCTION long __stdcall ClearAllDigital();
    FUNCTION long __stdcall SetDigitalChannel(long Channel);
    FUNCTION long __stdcall SetAllDigital();
    FUNCTION bool __stdcall ReadDigitalChannel(long Channel);
    FUNCTION long __stdcall ReadAllDigital();
    FUNCTION long __stdcall ReadCounter(long CounterNr);
    FUNCTION long __stdcall ResetCounter(long CounterNr);
    FUNCTION long __stdcall SetCounterDebounceTime(long CounterNr, long DebounceTime);
    
    FUNCTION long __stdcall Version();
    FUNCTION long __stdcall SearchDevices();
    FUNCTION long __stdcall SetCurrentDevice(long lngCardAddress);
    
    #ifdef __cplusplus
    }
    #endif
    

    wo finde ich den namen der klass?
    diese klasse habe ich von einem Beispiel Programm das läuft.
    vielen dank...!



  • Also in diesem Header gibt es keine Klasse - nur einen dicken Haufen an Funktionen. Bist du sicher, daß dein Beispielprogramm nicht noch einen anderen Header eingebunden hat (eventuell auch indirekt über die stdafx.h)?



  • Ja, ich habe noch eine weitere Klasse gefunden:

    #ifndef _K8055D_
    #define _K8055D_
    
    #include <afx.h>
    
    typedef long (CALLBACK* LONG2LONG)(long);
    typedef void (CALLBACK* VOID2VOID)(void);
    typedef void (CALLBACK* LONGPLONGP2VOID)(long *, long *);
    typedef void (CALLBACK* LONGLONG2VOID)(long, long);
    typedef void (CALLBACK* LONG2VOID)(long);
    typedef bool (CALLBACK* LONG2BOOL)(long);
    typedef long (CALLBACK* VOID2LONG)(void);
    
    class k8055d
    {
    public:
    	k8055d(void);
    	~k8055d(void);
    	long  init(void);
    	long  OpenDevice(long CardAddress);
    	void  CloseDevice();
    	long  ReadAnalogChannel(long Channel);
    	void  ReadAllAnalog(long *Data1, long *Data2);
    	void  OutputAnalogChannel(long Channel, long Data);
    	void  OutputAllAnalog(long Data1, long Data2);
    	void  ClearAnalogChannel(long Channel); 
    	void  ClearAllAnalog();
    	void  SetAnalogChannel(long Channel); 
    	void  SetAllAnalog();
    	void  WriteAllDigital(long Data);
    	void  ClearDigitalChannel(long Channel);
    	void  ClearAllDigital();
    	void  SetDigitalChannel(long Channel);
    	void  SetAllDigital();
    	bool  ReadDigitalChannel(long Channel);
    	long  ReadAllDigital();
    	long  ReadCounter(long CounterNr);
    	void  ResetCounter(long CounterNr);
    	void  SetCounterDebounceTime(long CounterNr, long DebounceTime);
    
    private:
    	bool  dout1;
    	bool  dout2;
    	bool  dout3;
    	bool  dout4;
    	bool  dout5;
    	bool  dout6;
    	bool  dout7;
    	bool  dout8;
    
    	bool  din1;
    	bool  din2;
    	bool  din3;
    	bool  din4;
    	bool  din5;
    
    	long  da1;
    	long  da2;
    	long  ad1;
    	long  ad2;
    
    	long  ct1;
    	long  ct2;
    	long  dbct1;
    	long  dbct2;
    
    	bool initialized;
    	HINSTANCE hDLL;
    	LONG2LONG		pOpenDevice;
    	VOID2VOID		pCloseDevice;
    	LONG2LONG		pReadAnalogChannel;
    	LONGPLONGP2VOID pReadAllAnalog;
    	LONGLONG2VOID	pOutputAnalogChannel;
    	LONGLONG2VOID	pOutputAllAnalog;
    	LONG2VOID		pClearAnalogChannel;
    	VOID2VOID		pClearAllAnalog;
    	LONG2VOID		pSetAnalogChannel;
    	VOID2VOID		pSetAllAnalog;
    	LONG2VOID		pWriteAllDigital;
    	LONG2VOID		pClearDigitalChannel;
    	VOID2VOID		pClearAllDigital;
    	LONG2VOID		pSetDigitalChannel;
    	VOID2VOID		pSetAllDigital;
    	LONG2BOOL		pReadDigitalChannel;
    	VOID2LONG		pReadAllDigital;
    	LONG2LONG		pReadCounter;
    	LONG2VOID		pResetCounter;
    	LONGLONG2VOID	pSetCounterDebounceTime;
    };
    
    #endif
    

    Jetzt bekomme ich aber einen anderen Fehler:

    Error 1 fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d] c:\program files\microsoft visual studio 8\vc\atlmfc\include\afx.h 24



  • Und keine der Dir vom Compiler vorgeschlagenen Lösungen funktioniert?



  • Da müsstest du etwas an deinen Projekteinstellungen verändern - entweder du nimmst die MFC-Unterstützung raus oder du definierst das angegebene Symbol "_AFXDLL".

    PS: Und da haben wir auch den Namen der Klasse: "k8055d"



  • also wenn ich im cpp file #define _AFXDLL reinschreibe ist der Fehler
    immer noch vorhanden. Und was /MD ist verstehe ich nicht



  • was google.de ist verstehst du auch nicht?



  • glaub mir dass ich auch schon gegoogelt habe und nicht der typ bin
    der gleich foren vollpostet. aber ich stehe im moment am anschlag und weis nicht weiter...



  • Den /MD mußt du in den Projekteinstellungen unter C/C++ -> Code Generation -> Laufzeit-Bibliothek umstellen. Und statt des #define würde ich das Symbol auch direkt in den Compile-Optionen ergänzen.

    (PS: Vielleicht reicht es auch, wenn du die Optionen änderst auf "MFC wird nicht verwendet")



  • Auf was mus ich den /MD setzen und wo finde ich die Compile-Optionen?
    Die Option MFC wird nicht verwendet finde ich leider auch nirgends...:(



  • http://msdn2.microsoft.com/en-US/library/2kzt1wy3.aspx

    To set this compiler option in the Visual Studio development environment

    Open the project's Property Pages dialog box. For details, see How to: Open Project Property Pages.
    2.

    Click the C/C++ folder.
    3.

    Click the Code Generation property page.
    4.

    Modify the Runtime Library property.

    (4. ergebnis bei google)

    Falls du nicht weißt wie man die 'Projekt Proberty Pages' aufruft, ist dort ein Link zu einem How-To. Den Link findest du wohl ohne Hilfe, oder?...



  • hier gibts noch mehr interessante infos zum dem thema:

    link



  • shit falscher link, sorry
    ihr braucht nicht draufzuklicken...

    ich hasse copy und past



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum MFC (Visual C++) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • hmmpf schrieb:

    http://msdn2.microsoft.com/en-US/library/2kzt1wy3.aspx

    To set this compiler option in the Visual Studio development environment

    Open the project's Property Pages dialog box. For details, see How to: Open Project Property Pages.
    2.

    Click the C/C++ folder.
    3.

    Click the Code Generation property page.
    4.

    Modify the Runtime Library property.

    (4. ergebnis bei google)

    Falls du nicht weißt wie man die 'Projekt Proberty Pages' aufruft, ist dort ein Link zu einem How-To. Den Link findest du wohl ohne Hilfe, oder?...

    Soweit bin ich auch schon. Die Frage war aber auf was muss ich den /MD setzen.
    Ich habe lediglich MT / MTd / MD / MDd zur auswahl.

    Wenn ich /MT auswähle verschwindet de /MD Fehler jedoch erscheint ein neuer:

    Error 1 fatal error LNK1104: cannot open file 'libcd.lib' Velleman


Anmelden zum Antworten