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


von Michael M. (lernender)


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:
1
unsigned char TransTel[32];
Der Versuch der Übergabe:
1
serialPort1->Write (TransTel,0,15);

Die Beschreibung zu write:
1
public:
2
void Write (
3
  array<wchar_t>^ buffer, 
4
  int offset, 
5
  int count
6
)

Vielen Dank vorab.

Grüße

von Rufus Τ. F. (rufus) Benutzerseite


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++.

von Jean Player (Gast)


Lesenswert?

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

von Michael M. (lernender)


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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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

von Arc N. (arc)


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

von Rufus Τ. F. (rufus) Benutzerseite


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,

von Jean Player (Gast)


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:
1
char arr[25];
2
strncpy(arr, "hello", strlen("hello"));
3
String^ str = System::Runtime::InteropServices::Marshal::PtrToStringAnsi(IntPtr((void*)arr));
4
serialPort1->Write(str);

Gruß

von Jean Player (Gast)


Lesenswert?

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

Gruß

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.