[C#] Pointer-Problem

DexXxtrin

Erfahrenes Mitglied
Hallo zusammen

Ich muss ein C++ Consolenprogramm auf ein C# WindowsForms-Programm umschreiben. Dabei habe ich ein Problem bei folgendem Code:

C#:
private void btnSync_Click(object sender, EventArgs e)
        {
            _serialPort.Open();
            PBSync();
            _serialPort.Close();
            btnSearch.Enabled = true;
        }
        private void PBSync()
        {
            char order = 0xC1;
            writeData(order);
        }

        private void writeData(char &ucMsg)
        {
            WriteFile (hCom, &ucMsg, 1, &iBytesWritten, NULL);
        }

bei der Funktion "writeData" bringt er einen Fehler wegen "&ucMsg".
Code:
Error	1	Identifier expected
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

der &-operator existiert nicht bei C#. Da es hier wohl um die serielle Schnittstelle geht, würde ich die entsprechende Funktionalität mit der Klasse System.IO.Ports.SerialPort reimplemtieren. Falls du dich aber partout mit den API-Funktionen herumschlagen willst, solltest du mal hier schauen, wie diese in .NET eingebunden werden.

Gruß
MCoder
 
Hallo,

Danke schon mal für deine Hilfe.
Könntes du mir sagen, wie der Befehl dann in C# heissen würde?
Wäre es dann SerialPort.Write()?
Mit dem Befehl geht es nicht. Ich habe jetzt SerialPort.Write("C1"). Aber diese Variante funktioniert nicht. (Gerät wird falsch synchronisiert...)
 
Wenn du ein Byte schreiben willst, kannst du keinen String übergeben:
C#:
SerialPort oSerial = new SerialPort();

// Initialisierung des Ports

oSerial.Write(new byte [] { 0xC1 }, 0, 1);
Gruß
MCoder
 
Auch das geht leider nicht. Aber ich weiss glaub an was, dass es liegt.
Ich muss ja das übergeben, was in der Adresse 0xC1 steht.
So wie ich das aus dem ersten Code lese...
Da ich den ersten Code nicht selbst geschrieben habe und auch keine Dokumentation vorliegt ist dies nicht gerade einfach...
 
C#:
main()
{
	unsigned short ucMsg = 0xC1;    // character to send

...
else if(strcmp(argv[1], "sync") == 0)
   {
	   PBSync();
   }
...
}
void PBSync()
{
	unsigned char order = 0xC1;
	writeData(order);
}

void writeData(unsigned char &ucMsg)
{
	printf("%x",&ucMsg);
	WriteFile (hCom, &ucMsg, 1, &iBytesWritten, NULL);
}
Die ausgabe vom printf-Befehl ergibt: "12f7c7"
 
Zuletzt bearbeitet:
Also jetzt habe ich den Überblick auch wieder...
Dein Befehl sollte eigentlich funktionieren, da ja 0xC1 übergeben wird.
Kann es sein, dass ich die Schnittstelle falsch eingestellt habe?
 
Ich muss ja das übergeben, was in der Adresse 0xC1 steht.
Nein das stimmt nicht. Du übergibst schon das Byte 0xC1. Da WriteFile aber eine Adresse auf einen Buffer erwartet, musst du die Adresse der char-Variablen übergeben (&ucMuc).
Die ausgabe vom printf-Befehl ergibt: "12f7c7"
Das ist die Adresse der char-Variablen; diese wird aber nicht zum COM-Port gesendet.

Ist den der COM-Port richtig initialisiert (Name, Baudrate, Parität, Timings, ...)?

// EDIT: Zu spät :)

Gruß
MCoder
 

Neue Beiträge

Zurück