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