Forum: PC-Programmierung .NET und RS232


von S!mply R. (bulb)


Angehängte Dateien:

Lesenswert?

Moinsen,

Mein Programm, dass ich für die Kommunikation über die serielle 
Schnittstelle in VS 6.0 in MFC geschrieben habe, habe ich nun in VS 2005 
übernommen.
Naja... es funzt net mehr. Ich kenn mich mit den Unterschieden zwischen 
VS 6.0 und VS 2005 nicht aus. Ich hab auch in einigen Foren gelesen, 
dass in .NET zur Programmierung der seriellen Schnittstelle C# empfohlen 
wird?!
Kann sich wer die Klasse anschauen und mal debuggen, ich weiss nicht ob 
es viel Aufwand ist, sie für VS 2005 anzupassen?!

Danke!

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> es funzt net mehr

Das ist eine äußerst präzise Fehlerbeschreibung.

Möchtest Du Dein MFC-Projekt mit VS2005 übersetzen? Dann genügt nicht 
die kostenlose "Express"-Version, weil der die MFC-Unterstützung fehlt.

Möchstes Du Dein MFC-Projekt nach C# portieren?
Das heißt alles neu schreiben.

Die beiden von Dir geposteten Sourcefiles (die ganz offensichtlich nicht 
von Dir sind) enthalten allerdings kaum MFC-spezifische Dinge; mit einem 
C++-Compiler und dem Windows-SDK sollte das auch verwendbar sein. Du 
musst aber darauf achten, echtes C++ und nicht die 
Microsoft-Perversion "managed C++" zu verwenden, die nämlich ist nur 
eine Verpackung für das unsägliche .Net-Geraffel und hat mit C++ nicht 
wirklich viel gemein.

von S!mply R. (bulb)


Lesenswert?

Ok, ich kann natürlich auch einen Auszug der Errorlist posten.
Ich habe NIE behautpet, dass diese Klasse von mir geschrieben wurde, ich 
habe lediglich geschrieben, dass ich mein Projekt in VS 2005 
(Vollversion) portiert habe.
Nein, ich möchte das MFC- Projekt nicht in C# schreiben, da es in VS 6.0 
läuft und ich den Rest um diese Klasse neu schreiben müsste. Aber wenn 
sich diese Klasse nicht portieren lässt, kann ich mein neus Projekt 
gleich in C# schreiben.

Fehlerliste:

warning C4996 'sprintf' was declared deprecated (Line 131)

warning C4996 'sprintf' was declared deprecated (Line 132)

error C2664: 'CreateFileW': cannot convert parameter 1 from 'char*' to 
'LPCWSTR'(Line 141)

error C2664: 'BuildComDCBW': cannot convert parameter 1 from 'char*' to 
'LPCWSTR'(Line 167)

error C2664: 'MessageBoxW': cannot convert parameter 2 from 'char*' to 
'LPCWSTR'(Line 413)

wanring C4267: 'argument': conversion from 'size_t' to 'DWORD', possible 
loss of data

von Severino R. (severino)


Lesenswert?

Rufus t. Firefly wrote:
>> es funzt net mehr
>
> Das ist eine äußerst präzise Fehlerbeschreibung.

Full Ack

> Möchtest Du Dein MFC-Projekt mit VS2005 übersetzen? Dann genügt nicht
> die kostenlose "Express"-Version, weil der die MFC-Unterstützung fehlt.

Meines Wissens gibt es kein VS2005 Express (VS=Visual Studio). Es gibt 
Visual Basic 2005 Express, Visual C# 2005 Express und sogar (!) Visual 
C++ 2005 Express.
Visual Studio 2005 gibt es z.B. als Standard, Professional, Enterprise 
oder  wie auch immer das heisst.
Und ab Standard ist MFC-Unterstützung drin.

@ S!mply Red
Also, raus mit der Sprache, was funzt net mehr?

von Karl H. (kbuchegg)


Lesenswert?

S!mply Red wrote:
> Ok, ich kann natürlich auch einen Auszug der Errorlist posten.


> warning C4996 'sprintf' was declared deprecated (Line 131)
>
> warning C4996 'sprintf' was declared deprecated (Line 132)

'deprecated' bedeutet, dass diese Funktion nicht mehr verwendet
werden sollte. Nur Microsoft weiß warum, sprintf ist eine Standard-
Funktion und also solches völlig in Ordnung.

> error C2664: 'CreateFileW': cannot convert parameter 1 from 'char*' to
> 'LPCWSTR'(Line 141)

Kann es sein, dass du auf Unicode umstellst. Die W Versionen vieler
Funktionen wollen dann anstelle eines normalen Textes in " " eine
"wide Character Version".

Entweder du drehst den Unicode Support in deinem VS ab oder du
benutzt dern von MS dafür vorgesehenen Datentyp wchar_t *

>
> wanring C4267: 'argument': conversion from 'size_t' to 'DWORD', possible
> loss of data

Der ist allerdings ungewöhnlich. Du kompilierst doch nicht etwa
für eine 64 Bit CPU?
Schau dir einfach die Stelle an, an der die Zuweisung ist und entscheide
ob dir da ein Problem entstehen kann oder nicht. size_t liefert
die Größe eines Datentyps in Bytes. Der size_t von int ist 
beispielsweise
4, der von long normalerweise 8 usw. also alles kleine Zahlen.
In der Mehrzahl der Fälle ist es kein Problem einen size_t in einen
DWORD zu verwandeln. Wenn das an der Stelle auch so ist, dann behebe
das Problem mit einem Cast.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> warning C4996 'sprintf' was declared deprecated (Line 131)

Diese Warnung kann man global abschalten. Welcher Teufel MS dabei 
geritten hat, ist unklar.

Allerdings - und da muss ich Karl Heinz widersprechen- ist sprintf in 
der Tat nicht sicher, wenn schon, dann snprintf.

Aber auch das wird mit derselben bekloppten Warnung 4996 angemäkelt.

@Severino:
Schön, daß Du das so präzise auseinanderhältst. Ich habe vorsichtig 
nachgefragt, weil absolut nicht sicher ist, daß der Threadstarter das 
auch so tut.

von Karl H. (kbuchegg)


Lesenswert?

Rufus t. Firefly wrote:
>> warning C4996 'sprintf' was declared deprecated (Line 131)
>
> Diese Warnung kann man global abschalten. Welcher Teufel MS dabei
> geritten hat, ist unklar.
>
> Allerdings - und da muss ich Karl Heinz widersprechen- ist sprintf in
> der Tat nicht sicher, wenn schon, dann snprintf.

Da hast du natürlich völlig recht.
Ich wollte meine Anmerkung eigentlich darauf bezogen wissen,
dass es aus Sicht des C++ Standards keinen formalen Grund gibt,
warum sprintf nicht verwendet werden sollte. Es ist und wird auch
in Zukunft eine Funktion des C++ Standards sein und ist keineswegs
in irgendeiner Form 'abgekündigt', wie einen die Warnung glauben
lassen könnte.

Das es natürlich haufenweise Gründe gibt, warum sprintf schlecht ist,
wie auch scanf, sscanf, gets, die ganzen originalen K&R str... Funkt.
und noch ein paar mehr, die mir momentan nicht einfallen, steht auf
einem anderen Blatt.

von Arc N. (arc)


Lesenswert?

> Diese Warnung kann man global abschalten. Welcher Teufel MS dabei
> geritten hat, ist unklar.
> Aber auch das wird mit derselben bekloppten Warnung 4996 angemäkelt.

Weil die Funktionen
1. wie schon erwähnt unsicher sind,
2. die von MS vorgeschlagenen Ersatzvarianten ala _snprintf_s im 
Gegensatz zu den ISO/IEC-Varianten das Ergebnis mit einem \0 terminieren
3. deprecated zwar auch veraltet, aber auch ablehnen/missbilligen 
bedeutet

TR 24731
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1146.pdf

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.