Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Von C zu C++

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] [ 2 ] > 3 <
020
28.10.2009, 20:57 Uhr
~Heinz
Gast


Hallo und danke an euch! ;-)

@ Hans: Das sieht sehr gut aus, ich glaube das wird mir weiterhelfen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
021
28.10.2009, 21:42 Uhr
~Heinz
Gast


Kann mir vielleicht nochmal jemand helfen?

Bei dem ersten Programm des Tutorials www.pronix.de/pronix-1037.html bekomme ich die Fehlermeldungen


Zitat:
error C3861: "_T": Bezeichner wurde nicht gefunden.[/qoute]
[quote]error C2440: '=': 'LPCSTR' kann nicht in 'LPCWSTR' konvertiert werden[/qoute]
[quote]Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.[/qoute]


Im Tutorial steht
[quote]Sollten Sie also bspw. mal eine Fehlermeldung wie: "cannot convert from LPCSTR to LPCWSTR" erhalten, stellen Sie einfach die Zeichenketten zwischen _T().


Da ist die erste Fehlermeldung leider nicht enthalten und was meint der mit "stellen Sie die Zeichenkette zwischen _T()?

Etwa so: _T"AppName"() ? Ich versteh den Satz nicht.Wäre sehr nett wenn mir jemand beim Einstieg nochmal helfen kann.

Ich habe Visual Studio 2008.

Danke.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
022
28.10.2009, 22:49 Uhr
Hans
Library Walker
(Operator)


Hi,

also das mit dem _T() hat was mit Unicode zu tun. Die weitere Erläuterung ist mir im Augenblick allerdings auch Schleierhaft. Da es sich bei dem Datentyp LPCSTR um einen Zeiger auf einen konstanten String, also const char* handelt, funktioniert es auch so:

C++:
LPCSTR lpszAppName = "AppName";
LPCSTR lpszTitle   = "Meine erste Applikation";



Ich verwende übrigens den OpenWatcom C/C++ Compiler Version 1.8
Mit den Microsoftcompilern kenne ich mich nicht aus, da ich die nie benutzt habe.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 28.10.2009 um 22:52 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
023
28.10.2009, 23:07 Uhr
0xdeadbeef
Gott
(Operator)


_T() ist ein Makro aus <tchar.h>, das je nach Präprozessordefinitionen zu einem wide- oder ASCII-String-Literal expandiert. Üblicherweise schaltet man das mit dem _UNICODE-Switch um. Zum Beispiel expandiert

C++:
_T("foo")


wenn _UNICODE definiert ist, zu

C++:
L"foo"


sonst zu

C++:
"foo"


Genau erklärt ist das hier: http://msdn.microsoft.com/en-us/library/se784sk6.aspx

An Datentyp-Aliasen finden sich dann

LPSTR == char *
LPWSTR == wchar_t *
LPTSTR == TCHAR *

wobei TCHAR je nach Makro-Definition char * oder wchar_t * ist. Analog gibt es

LPCSTR == char const *
LPCWSTR == wchar_t const *
LPCTSTR == TCHAR const *
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 28.10.2009 um 23:11 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
024
29.10.2009, 05:11 Uhr
Hans
Library Walker
(Operator)


Hi,

also soweit ich das bisher verstanden habe, gehört _T() zum Kapitel Generic-Text Mapping, wozu man in der MSDN liest:

Zitat von MSDN:

Generic-text mappings are Microsoft extensions that are not ANSI compatible.


Das scheint wohl auch der Grund dafür zu sein, das der Open Watcom Compiler zwar UNICODE kennt, aber kein _UNICODE. Wenn ich also nicht noch was wichtiges vergessen habe, dann übersetzt er mir das Programm mit

C++:
#define UNICODE
#include <windows.h>


so, das es Texte im Unicode-Format verwendet. Wenn ich dagegen schreibe:

C++:
#define _UNICODE
#include <windows.h>


also den Unterstrich vor UNICODE verwende, erzeugt er ein Programm, das mit ASCII-Code arbeitet. Die Zeilen

C++:
LPCSTR lpszAppName = _T("AppName");
LPCSTR lpszTitle   = _T("Meine erste Applikation");


bleiben ich beiden Fällen so erhalten wie sie da stehen. Da macht der Präprozessor nichts dran, weil <tchar.h> durch <windows.h> nicht automatisch ins Programm eingebunden wird. Das hätte ich allerdings erwartet. Wenn ich <tchar.h> von Hand einbinde, also so:

C++:
#define UNICODE
#include <windows.h>
#include <tchar.h>


dann macht der Präprozessor zwar:

C++:
LPCSTR lpszAppName = "AppName";
LPCSTR lpszTitle   = "Meine erste Applikation";


daraus, aber dann mosert der Compiler an der Stelle und überall dort, wo lpszAppName bzw. lpszTitel verwendet werden wegen Typenkonflikt. Also kann das nicht richtig sein. Da es aber auch ganz ohne _T() geht, und die Generic-text mappings für Anfänger im WinAPI eh nicht so wichtig sind, kann man auch drauf verzichten.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 29.10.2009 um 05:23 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
025
29.10.2009, 09:08 Uhr
ao

(Operator)


Entschuldigung, wenn ich mich wiederhole, aber ich möchte nochmal empfehlen, nicht zuviel Energie in das Erlernen veralteter Programmiertechniken zu stecken (es sei denn aus rein nostalgischen Gründen).

Die Entwicklung ganzer Applikationen auf dem nackten WinAPI ist spätestens seit der Ausbreitung von Frameworks wie MFC oder VCL (Mitte der 90er) nicht mehr notwendig - zum Glück!

Inzwischen gibts eine Handvoll etablierter und gut gepflegter Toolkits, und ich würde jedem, der mit modernen Mitteln ein Programm auf die Beine stellen will, dringend raten, sich eins davon auszusuchen.

Außerdem würde ich empfehlen, die Entscheidung für C++ nochmal zu überprüfen und als Alternativen Java und C# in Erwägung zu ziehen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
026
29.10.2009, 20:22 Uhr
~Heinz
Gast


Nagut, ich werde mich mal an C# ranwagen.


Vielen Dank an alle für die Hilfe!

Grüße Heinz
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
027
29.10.2009, 21:28 Uhr
Hans
Library Walker
(Operator)


@ao: Es mag ja sein, dass das in weiten Bereichen richtig ist, was Du empfielst, aber das sehen nicht alle so. Z.B. wird an der FH, die ich auch mal besucht habe, im Bereich Informatik jetzt erst Java und danach C++ gelehrt. Und weil der Fachbereich eng mit der Elektrotechnik verknüpft ist (technisch Informatik eben) kommt auch C nicht zu kurz. Oder gibt es inzwischen auch Java-Entwicklungsplattformen für Mikrocontroller mit Speicherkapazitäten im ein- bzw. zweistelligen Kilobyte Bereich? - Okay, das hat mit der Frage hier nichts mehr zu tun, würde mich aber grundsätzlich mal interessieren.
Und was WinAPI bzw. GUIs ganz allgemein angeht, so stehe ich auf dem Standpunkt, das man die Grundlagen einer GUI zumindest mal angekratzt haben sollte, weil man danach die Vorteile von MFC, VCL & Co. samt der zugehörigen Toolkits besser einschätzen und würdigen kann. Also zumindest mal eine kleine Applikation nur mit Hilfe der zugrunde liegenden API entwickeln, damit man sieht, was da alles hintersteckt. Danach kann man ja mit Qt, Motif, Swing oder was auch immer weiter machen.
Davon mal abgesehen würde mich mal interessieren, ob ich mit meiner Einschätzung der Generic-text mappings richtig liege.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 29.10.2009 um 21:40 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
028
30.10.2009, 11:26 Uhr
ao

(Operator)



Zitat von Hans:
@ao: Es mag ja sein, dass das in weiten Bereichen richtig ist, was Du empfielst, aber das sehen nicht alle so. Z.B. wird an der FH, die ich auch mal besucht habe, im Bereich Informatik jetzt erst Java und danach C++ gelehrt. Und weil der Fachbereich eng mit der Elektrotechnik verknüpft ist (technisch Informatik eben) kommt auch C nicht zu kurz. Oder gibt es inzwischen auch Java-Entwicklungsplattformen für Mikrocontroller ...


Inwiefern widerspricht das meiner Empfehlung?

Es ist doch genau das, was ich sage: Einstieg mit Java, mit allem Komfort der modernen Technik, danach C++, weils in manchen Fällen auf Performance ankommt und weil es viel Bestandscode gibt, mit dem man wahrscheinlich irgendwann mal in Berührung kommt.

Und für die, die immer noch nicht genug haben, kommt danach noch C, vermutlich auf Mikrocontrollern der PIC- oder ATMega-Klasse.

Guter Plan, vorausgesetzt, die Studenten *lernen* diese Sprachen wirklich und kratzen nicht nur an der Oberfläche.

Ich habe nur davon abgeraten, Windows-Applikationen direkt auf dem WinAPI aufzusetzen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
029
30.10.2009, 22:45 Uhr
Hans
Library Walker
(Operator)


Hi,


Zitat von ao:

Inwiefern widerspricht das meiner Empfehlung?

Es ist doch genau das, was ich sage: Einstieg mit Java, mit allem Komfort der modernen Technik, danach C++, weils in manchen Fällen auf Performance ankommt und weil es viel Bestandscode gibt, mit dem man wahrscheinlich irgendwann mal in Berührung kommt.

Ah so. Ich hab das so gedeutet, das Du inzwischen generell von C++ abrätst und stattdessen nur noch Java oder C# empfiehlst.


Zitat:
Und für die, die immer noch nicht genug haben, kommt danach noch C, vermutlich auf Mikrocontrollern der PIC- oder ATMega-Klasse.

Guter Plan, vorausgesetzt, die Studenten *lernen* diese Sprachen wirklich und kratzen nicht nur an der Oberfläche.

Dazu kann ich nichts mehr sagen, weil ich mich so genau auch nicht mit den Leuten unterhalten habe.


Zitat:
Ich habe nur davon abgeraten, Windows-Applikationen direkt auf dem WinAPI aufzusetzen.

Und an meiner Meinung dazu nichts auszusetzen?

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] [ 2 ] > 3 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: