mikrocontroller.net

Forum: PC-Programmierung Daten an serialPort->Write Methode übergeben


Autor: Michael M. (lernender)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe mir kürzlich Visual C++ express runtergeladen und eine erste 
Anwendung erstellt- soweit zu zum Wissen.

Ich habe habe ein array mit Daten befüllt und möchte die Inhalte nun 
lediglich an eine serielle Schnittstelle ausgeben. Nur hier meckert es 
nun mächtig bei der Übergabe meines arrays und es verlangt nach einem 
system...::arry, was ich aber nicht zu handeln weiss.
Kann mir jemand sagen, wie ich die Daten entsprechend konvertiert 
bekomme?
Ich verwende den System::...seialport (endlich mal eine gute Sache in 
Visual...).
Fehlermeldung:
c:\users\mm22\documents\visual studio 
2010\projects\liftdialog\liftdialog\Form1.h(220): error C2664: 'void 
System::IO::Ports::SerialPort::Write(cli::array<Type,dimension> 
^,int,int)': Konvertierung des Parameters 1 von 'unsigned char [32]' in 
'cli::array<Type,dimension> ^' nicht möglich
1>          with
1>          [
1>              Type=wchar_t,
1>              dimension=1
1>          ]

Mein Array:
unsigned char TransTel[32];
Der Versuch der Übergabe:
serialPort1->Write (TransTel,0,15);

Die Beschreibung zu write:
public:
void Write (
  array<wchar_t>^ buffer, 
  int offset, 
  int count
)

Vielen Dank vorab.

Grüße

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Problem ist doch recht eindeutig:

Write erwartet

  array<wchar_t>^ buffer,

Du aber übergibst

  unsigned char TransTel[32];

Das ist was komplett anderes.

Hinweis: Das, was Du da benutzt, ist kein C++, sondern eine 
Microsoft-Perversion namens "Managed C++", die auf dem .Net-Geraffel 
aufsetzt. Du solltest bei Nachfragen deutlich darauf hinweisen, daß es 
nicht um C++, sondern eben um dieses "Managed C++" geht, denn das 
unterscheidet sich nicht nur inhaltlich, sondern auch in der Syntax.

So etwas:

  array<wchar_t>^ buffer,

ist kein C++.

Autor: Jean Player (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
ist ausm Kopf aber sollte stimmen.
cli::array<unsigned char,1>^ arr = gcnew cli::array<unsigned char,1> (32);
serialPort1->Write(arr,0,15);

Autor: Michael M. (lernender)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank @Jean Player,
passt perfekt.

@rufus, ja es mag sein- und ich mag das geraffel auch nicht.
Hatte mir allerdings etwas wie die zweite Antwort gewünscht.
Da wir gerade dabei sind, welche Entwicklungsumgebung ist denn für Leute 
zu empfehlen, die seltener etwas machen. Allerdings sollte es schon C 
oder C++ sein und das ganze soll unter Windows lauffähige Programme 
bringen mit etwas grafischer Oberfläche.

Grüße

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Niemand zwingt Dich, mit Visual Studio "Managed C++" zu programmieren, 
das ist auch ein echter C- und C++-Compiler.

Autor: Arc Net (arc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rufus t. Firefly schrieb:
> Das Problem ist doch recht eindeutig:
>
> Write erwartet
>
>   array<wchar_t>^ buffer,
>
> Du aber übergibst
>
>   unsigned char TransTel[32];
>
> Das ist was komplett anderes.
>
> Hinweis: Das, was Du da benutzt, ist kein C++, sondern eine
> Microsoft-Perversion namens "Managed C++", die auf dem .Net-Geraffel
> aufsetzt.

Zum hundertsten: Das ist seit Ewigkeiten C++/CLI und nicht mehr das 
vermurkste Managed C++.

> Du solltest bei Nachfragen deutlich darauf hinweisen, daß es
> nicht um C++, sondern eben um dieses "Managed C++" geht, denn das
> unterscheidet sich nicht nur inhaltlich, sondern auch in der Syntax.

Gerade eben nicht: Der C++/CLI-Compiler übersetzt problemlos jeden 
ISO-C++ Quelltext (http://www.gotw.ca/publications/C++CLIRationale.pdf).
Die Frage dreht sich damit nur darum, wie man ein "normales" Array an 
eine Funktion des .NET-Frameworks übergibt oder, wie oben schon erklärt, 
ein verwaltetes Array verwendet.

Michael M. schrieb:
> Vielen Dank @Jean Player,
> passt perfekt.
>
> @rufus, ja es mag sein- und ich mag das geraffel auch nicht.
> Hatte mir allerdings etwas wie die zweite Antwort gewünscht.
> Da wir gerade dabei sind, welche Entwicklungsumgebung ist denn für Leute
> zu empfehlen, die seltener etwas machen.

C#

> Allerdings sollte es schon C
> oder C++ sein und das ganze soll unter Windows lauffähige Programme
> bringen mit etwas grafischer Oberfläche.

C++/CLI (egal ob mit oder ohne CLI) ist eigentlich nur zu empfehlen, 
wenn man entweder bspw. aus performance Gründen nativen Code braucht 
oder wenn man noch div. unmanaged "Zeug" hat, dass man ansprechen muss.
Für alles andere gibt es bessere Alternativen.

> Grüße

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Zum hundertsten: Das ist seit Ewigkeiten C++/CLI und nicht mehr das
> vermurkste Managed C++.

Auch wenn es anders genannt wird, C++ ist das da nicht:

>>   array<wchar_t>^ buffer,

Autor: Jean Player (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rufus t. Firefly schrieb:
> Auch wenn es anders genannt wird, C++ ist das da nicht:
>
>>>   array<wchar_t>^ buffer,

Nö, das ist cli !
Aber wem c++ besser gefällt und dennoch nicht auf die schönen .net 
framework funktionen verzichten will, kann auch sowas machen:
char arr[25];
strncpy(arr, "hello", strlen("hello"));
String^ str = System::Runtime::InteropServices::Marshal::PtrToStringAnsi(IntPtr((void*)arr));
serialPort1->Write(str);

Gruß

Autor: Jean Player (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ähm Pardon meinte natürlich
strncpy(arr, "hello", strlen("hello")+1);

Gruß

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.