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@@AAMXDH@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++?