LPT-Ansteuerung unter Visual C++



  • Hallo,
    nachdem es beim Borland C++ Builder nun funktioniert möchte ich die LPT-Schnittstelle mit VC++ (Windows Forms-Anwendung) ansteuern.

    Wenn ich es genau gleich versuche wie bei Borland geht es aber nicht. Bei der inpout32.dll ist zwar ein Beispiel-Prog dabei, dass mit VC++ erstellt wurde, aber ich finde dort einfach die Stelle nicht, an der man die DLL einfügt. Bei

    Ich hab dazu erst mal ne Klasse erstellt, ähnlich wie bei Borland: (Die Methoden sind noch nicht ganz fertig ...)

    #pragma once
    
    #include "stdafx.h"
    
    using namespace System::Windows::Forms;
    
    // Port definieren
    #define port 0x378
    
    // Funktionsprototypen
    typedef short (_stdcall *inpfuncPtr)(short portaddr);
    typedef void (_stdcall *oupfuncPtr)(short portaddr, short datum);
    
    // Pointer
    inpfuncPtr inp32fp;
    oupfuncPtr oup32fp;
    
    // Wrapper-Funktionen
    short Inp32(short portaddr)
    {
      return (inp32fp)(portaddr);
    }
    
    void Out32(short portaddr, short datum)
    {
      (oup32fp)(portaddr,datum);
    }
    
    ref class LPT
    {
      private:
    	char reg;
    
      public:
        LPT(void);
    	void In(char, int);
    	void Out(char, int);
    	int getAdresse();
    };
    
    void LPT()
    {
    	// DLL laden
        HINSTANCE hLib = LoadLibrary(L"inpout32.dll");
        if(hLib == NULL) MessageBox::Show("Fehler beim Laden der DLL");
    
    	// Prozessadressen laden
        inp32fp = (inpfuncPtr) GetProcAddress(hLib, "Inp32");
        if(inp32fp == NULL) MessageBox::Show("Fehler beim Laden der Input-Prozessadresse");
        oup32fp = (oupfuncPtr) GetProcAddress(hLib, "Out32");
        if(oup32fp == NULL) MessageBox::Show("Fehler beim Laden der Output-Prozessadresse");
    }
    
    void LPT::In(char reg, int bit)
    {
    	// In
    }
    
    void LPT::Out(char reg, int sig)
    {
    	// Out
    }
    
    int LPT::getAdresse()
    {
    	return port;
    }
    

    Dabei kommen dann folgende Fehlermeldungen:

    ------ Erstellen gestartet: Projekt: LPT-Test, Konfiguration: Debug Win32 ------
    Kompilieren...
    stdafx.cpp
    Kompilieren...
    LPT.cpp
    LPT-Test.cpp
    Code wird generiert...
    Verknüpfen...
    stdafx.obj : error LNK2005: "void (__stdcall* oup32fp)(short,short)" (?oup32fp@@$$Q3P6GXFF@ZA) ist bereits in LPT.obj definiert.
    stdafx.obj : error LNK2005: "short (__stdcall* inp32fp)(short)" (?inp32fp@@$$Q3P6GFF@ZA) ist bereits in LPT.obj definiert.
    stdafx.obj : error LNK2005: "short __clrcall Inp32(short)" (?Inp32@@$$FYMFF@Z) ist bereits in LPT.obj definiert.
    stdafx.obj : error LNK2005: "void __clrcall Out32(short,short)" (?Out32@@$$FYMXFF@Z) ist bereits in LPT.obj definiert.
    stdafx.obj : error LNK2005: "void __clrcall LPT(void)" (?LPT@@$$FYMXXZ) ist bereits in LPT.obj definiert.
    stdafx.obj : error LNK2005: "public: void __clrcall LPT::In(char,int)" (?In@LPT@@$$FQAAMXDH@Z) ist bereits in LPT.obj definiert. stdafx.obj : error LNK2005: "public: void __clrcall LPT::Out(char,int)" (?Out@LPT@@FQFQAAMXDH@Z) ist bereits in LPT.obj definiert.
    stdafx.obj : error LNK2005: "public: int __clrcall LPT::getAdresse(void)" (?getAdresse@LPT@@$$FQ$AAMHXZ) ist bereits in LPT.obj definiert.
    C:\Dokumente und Einstellungen\Administrator\Eigene Dateien\Visual Studio 2005\Projects\LPT-Test\Debug\LPT-Test.exe : fatal error LNK1169: Mindestens ein mehrfach definiertes Symbol gefunden.
    Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\Administrator\Eigene Dateien\Visual Studio 2005\Projects\LPT-Test\LPT-Test\Debug\BuildLog.htm" gespeichert.
    LPT-Test - 9 Fehler, 0 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========

    In dem Beispiel-Projekt finde auch keine einzige Zeile, in der die DLL eingebunden wurde.

    Wie geht das in VC++?


Anmelden zum Antworten