Forum: PC-Programmierung Problem in C# mit dll einbindung


von Arne P. (ob3lix)


Angehängte Dateien:

Lesenswert?

Hallo an alle,

wir haben ein Problem mit dem C# Programm für das S.N.A.P. Protokoll, 
welches sich im Anhang befindet!
1
Fehler  1  "System.IO.Ports.SerialPort" enthält keine Definition für "EventFilter", und es konnte keine Erweiterungsmethode "EventFilter" gefunden werden, die ein erstes Argument vom Typ "System.IO.Ports.SerialPort" akzeptiert. (Fehlt eine Using-Direktive oder ein Assemblyverweis?)  42
2
Fehler  2  Eine implizite Konvertierung vom Typ "System.EventHandler" in "System.IO.Ports.SerialDataReceivedEventHandler" ist nicht möglich.  43
3
Fehler  3  "System.IO.Ports.SerialPort" enthält keine Definition für "EventFilter", und es konnte keine Erweiterungsmethode "EventFilter" gefunden werden, die ein erstes Argument vom Typ "System.IO.Ports.SerialPort" akzeptiert. (Fehlt eine Using-Direktive oder ein Assemblyverweis?)  49
4
Fehler  4  Eine implizite Konvertierung vom Typ "System.EventHandler" in "System.IO.Ports.SerialDataReceivedEventHandler" ist nicht möglich.  50
5
Fehler  5  "System.EventArgs" enthält keine Definition für "EventType", und es konnte keine Erweiterungsmethode "EventType" gefunden werden, die ein erstes Argument vom Typ "System.EventArgs" akzeptiert. (Fehlt eine Using-Direktive oder ein Assemblyverweis?)  148
6
Fehler  6  "System.IO.Ports.SerialPort" enthält keine Definition für "InBufferBytes", und es konnte keine Erweiterungsmethode "InBufferBytes" gefunden werden, die ein erstes Argument vom Typ "System.IO.Ports.SerialPort" akzeptiert. (Fehlt eine Using-Direktive oder ein Assemblyverweis?)  151
7
Fehler  7  "System.EventArgs" enthält keine Definition für "EventType", und es konnte keine Erweiterungsmethode "EventType" gefunden werden, die ein erstes Argument vom Typ "System.EventArgs" akzeptiert. (Fehlt eine Using-Direktive oder ein Assemblyverweis?)  158

die SerialPort.dll, die bei dem ursprünglichen Porgramm dabei war, ist 
vermutlich veraltet, diese haben wir jetzt entfernt. Von den Anfangs 14 
Fehlern sind jetzt noch die obrigen 7 übrig... Auch unsere Lehrer können 
uns im Moment nicht weiterhelfen... auch suchen in google brachte uns 
bisher nicht weiter!

hoffe das ihr irgendwie helfen könnt!

Gruß
Arne

von Markus V. (Gast)


Lesenswert?

Hallo Arne,

Ihr habt folgende Probleme: Selbst wenn Ihr eine der beiden "externen" 
DLLs unter References aufnehmen würdet, gäbe es einen Konflikt mit der 
namensgleichen Klasse System.IO.Ports.SerialPort aus der System.dll, die 
immer benötigt wird. Vergesst also getrost die beiden DLLs 
SerialPort.dll.

Ein weiteres Problem: Keine der bekannten Klassen SerialPort (weder die 
vom .NET-Framework mitgebrachte noch die beiden im Projekt vorhandenen 
DLLS) haben ein Property EventFilter, folglich mault der Compiler bei 
einer Zuweisung an das Property.

Ihr solltet vielleicht probehalber mal die Zuweisungen zum Property 
EventFilter auskommentieren und schauen was passiert, wenn sich das 
Programm übersetzen lässt.

Das nächst Problem:
1
serialPort.DataReceived += new EventHandler(serialPort_OnReceiveEvent);

sollte besser lauten
1
serialPort.DataReceived += serialPort_OnReceiveEvent;


Gruß
Markus

von bluppdidupp (Gast)


Lesenswert?

Das Projekt nutzte scheinbar nicht die .net SerialPort-Klasse sondern 
eine eigene die grob der .net-Klasse entspricht (oder ist das vllt. .net 
1.0 oder so?)

- Entfernt die serialPort.EventFilter = SerialData.Chars; Zeilen.
- Ersetzt EventHandler durch SerialDataReceivedEventHandler (bei den 
SerialPort-Dingern)
- Im OnReceiveEvent den switch-Block raus und nur den Kram vom "case 
SerialData.Chars" übrig lassen

...das würde ich jetzt beim kurzen drüber gucken erstmal einfach so 
vermuten ;D

von Arc N. (arc)


Lesenswert?

EventFilter gibt es nicht mehr 1) bzw. kann man sehr einfach im 
DataReceived, ErrorReceived und PinChanged-Event selber machen.

Was allerdings fehlt bzw. u.U. bei der Konvertierung der Projekts 
verloren gegangen ist, ist die Referenz auf die SerialPort.dll im 
Projektverzeichnis.
Fügt man die hinzu (Menü->Project->Add Reference->Browse), sollte es zu 
einem Namenskonflikt kommen (alt und neu sind im selben Namensraum 
System.IO.Ports). Lösung: Entweder den Code vollständig an den neuen 
SerialPort anpassen oder einen Alias für den alten SerialPort erzeugen:
In der Solution unter References den alten SerialPort auswählten 
Alt+Enter bzw. RMB->Properties und unter Aliases global durch z.B. 
SerialPortOld ersetzen.
Im Quelltext muss dann als erstes so was wie
1
extern alias SerialPortOld;
2
using SerialPortOld.System.IO.Ports;
3
using SerialPortOld.System.IO;
4
// eingefügt werden
5
// Das alte using System.IO.Ports kann man durch ersetzen, falls man da was braucht
6
using SysIOAlias = System.IO.Ports;

1) ab .NET 2.0, Referenzquelltexte 
http://referencesource.microsoft.com/netframework.aspx bzw. die alte 
Version
http://csharp.codefetch.com/example/p3/Chapter04/SerialPort/SerialPort.cs?qy=ARRAY

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.