www.mikrocontroller.net

Forum: PC-Programmierung .NET und RS232

Autor: S!mply Red (bulb)
Datum: 09.05.2008 14:55
Dateianhang: uComm.rar (6,8 KB, 11 Downloads)

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 t. Firefly (rufus) (Moderator)
Datum: 09.05.2008 15:47

> 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: 09.05.2008 16:13

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: 09.05.2008 16:17

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 Buchegger (kbuchegg) (Moderator)
Datum: 09.05.2008 16:23

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 t. Firefly (rufus) (Moderator)
Datum: 09.05.2008 16:29

> 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 Buchegger (kbuchegg) (Moderator)
Datum: 09.05.2008 16:40

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: 09.05.2008 19:54

> 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 Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
  • Aussagekräftigen Betreff wählen
  • Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
  • JPEG-Dateien (.jpg) nur für Fotos verwenden, Schaltpläne, Screenshots usw. als PNG oder GIF anhängen

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel






webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net