www.mikrocontroller.net

Forum: PC-Programmierung .NET und RS232


Autor: S!mply Red (bulb)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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!

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

Bewertung
0 lesenswert
nicht 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.

Autor: S!mply Red (bulb)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

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

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Arc Net (arc)
Datum:

Bewertung
0 lesenswert
nicht 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

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.