VS-2012 SP1 ist verfügbar und damit wird die Entwicklung von C++ Programmen für Windows XP-SP3 möglich

Microsoft hat Wort gehalten und es steht das SP1 für Visual Studio 2012 zur Verfügung.
Damit kann man nun auch mit VS-2012 native C++ Programme für Windows XP-SP3 entwickeln.

Weiere Informationen finden sich hier:

Strg+V und Umschalt+Einfg macht doch eigentlich das selbe… oder etwa nicht?

Ja! Das könnte man denken. Strg+V sowie Umschalt+Einfg sind Shortcuts um etwas aus der Zwischenablage einzufügen.
Man könnte weiterhin davon ausgehen, dass Windows in einem Edit-Control beide gleich behandelt. D.h. benutzt der Anwender Strg+V oder Umschalt+Einfg oder das  im Edit-Control, dann wird immer der selbe Vorgang ausgelöst.

Schön wäre es ja 🙁 …

Sowohl bei Strg+V, wie auch bei Umschalt+Einfg und über das Kontextmenü wird WM_PASTE an das Edit-Control gesendet. Schön!

Aber hat das Edit-Control den Stil ES_READONLY – ist also als nur lesend definiert -, dann wird bei Eingabe von Strg+V die Nachricht WM_PASTE nicht gesendet. Auch das Kontextmenü blendet den Menüpunkt Einfügen brav aus. Auch das ist gut so und wie erwartet.

Aber was passiert bei Umschalt+Einfg?
Ja. Das unerwartete passiert und in diesem Fall wird doch WM_PASTE gesendet…

Herausgekommen ist das als Bug in unserer Software bei einer speziellen Edit-Control Klasse, die auch bestimmte andere Datenformate aus der Zwischenablage verstehen soll. Ein Kunde stellte letzten Endes fest, dass er über Umschalt+Einfg weiterhin auch in ein Readonly-Control Daten einfügen kann.

Ich war ziemlich überrascht als ich dieses „unlogische“ Verhalten im Testfeld nachvollziehen konnte.
Wer hätte es gedacht? Ich nicht…

Visual Studio 2012 C++: CTP Version für Zielplattform Windows XP ist verfügbar

Es ist soweit. Für VS-2012 C++ ist seit einigen Tagen CTP Version verfügbar.
So ist es in einem der letzten Beiträge auf dem VC++ Team Blog zu lesen:

http://blogs.msdn.com/b/vcblog/archive/2012/10/08/10357555.aspx

D.h. mit der entsprechenden Library und den neuen Projekteinstellungen kann man mit VS-2012 wieder C++ Programme erstellen, die auch auf Windows-XP laufen.

Visual Studio 2012 steht für MSDN Abonnementen zum Download bereit

Ich bin zwar etwas spät dran aber es mag für einige doch eine Neuigkeit sein.

Microsoft hat die finale Version von Visual Studio 2012 für MSDN Abonnementen freigegeben!
Weiterführende Infos gibt es auf dem VC-Blog:
http://blogs.msdn.com/b/vcblog/archive/2012/08/14/10339695.aspx

Und sie bewegt sich doch…

Man glaubt es nicht ❗ Ich glaube es nicht ❗

Microsoft hat doch beigedreht:

We recently announced the Visual Studio 2012 product lineup and platform support, and as a part of this announcement we mentioned that we were evaluating options for enabling C++ developers to build applications in Visual Studio 2012 that run on Windows XP without requiring side-by-side installation of Visual Studio 2010. Today I would like to share more details about this capability.

Siee http://blogs.msdn.com/b/vcblog/archive/2012/06/15/10320645.aspx

Definitv kein XP-Support mehr in VS-11 (VS-2012)

Es ist endgültig, es wird keinen XP-Support mit VS-2012 mehr geben:
http://blogs.msdn.com/b/visualstudio/archive/2012/05/18/a-look-ahead-at-the-visual-studio-11-product-lineup-and-platform-support.aspx

Es bleibt also nur Multi-Tragetting. D.h. die VS-11 (VS-2012) Öberfläche benutzen aber die Entwicklungsumgebung aus VS-2010.
Für mich ist das keine Alternative. Da kann ich gleich bei VS-2010 bleiben.

Ich für meinen Teil bin wieder mal enttäuscht. Microsoft will nah am Kunden/Entwickler sein? Aber hören will man deshalb dennoch nicht auf uns… 🙁

Als Workarround hat sich MVP Mike Ryan sich richtig Arbeit gemacht:
http://supportxp.com/
Hier findet sich Code wie man die Code der mit VS-2012 erzeugt wird doch noch auch Windows-XP zum laufen bringt. Ob dies aber wirklich für alle produktiv eine Möglichkeit ist wage ich zu bezweifeln.

Microsoft bietet wieder kostenlose C++ Days 2012 zum Thema Windows 8 an

Microsoft bietet auch dieses Jahr wieder kostenlose C++ Days an. Diesmal den aktuellen Themen Windows 8 für Entwickler und ALM für C++ Entwickler.

Vielleicht eine gute Möglichkeit sich als nativer C++ Entwickler ein Bild von Windows 8 und Metro Programmierung zu machen um sich selbst ein Urteil zu bilden was Metro und WinRT ist und was es eben auch nicht ist. 😉

Wann? und Wo?

14.06 Berlin Anmeldung
18.06 Unterschleißheim Anmeldung
25.06 Köln Anmeldung
26.06 Bad Homburg Anmeldung
03.07 Blaustein Anmeldung

Weitere Infos und eine Agenda zu diesen kostenlosen Veranstaltungen findet sich auf Christian Binders Blog!

Bericht über die Advanced Developers Conference (ADC) für C++ in Ohlstadt vom 03.+04. Mai 2012

Auf http://www.c-plusplus.de ist von mir jetzt ein Artikel zu der ADC C++ Konferenz in Ohlstadt erschienen, die am 03.04. Mai 2012 stattfand.
Über die Abendveranstaltung habe ich in meinem letzten Blogartikel auszugsweise berichtet.

Advanced Developers Conference C++ – native C++ im Blickpunkt (Tag 1)
Advanced Developers Conference C++ – native C++ im Blickpunkt (Tag 2)

Viel Spaß beim Lesen!

 

Und das letzte Wort zu VS-11 und Windows-XP ist doch nicht gesprochen…

Gestern Abend hatten wir hier auf der ADC 2012 für C++ in Ohlstadt bei einem schönen Abendevent eine Q&A. Letztes Jahr fand diese Q&A auf einer Schiffahrt auf dem Chiemsee statt. Dieses Jahr war es ein Fußweg von ca. 20 Minuten vom Konferenzhotel, zu einem großen „Grillplatz“, dort standen Zelte, Fackeln Lagerfeuer und es wurde gut gegessen und wie immer viel „Networking“ betrieben.

Wie auch letztes Jahr sollten detailierte Fragen auf diese Q&A zu späterer Stunde vertagt werden.

DIE FRAGE die viele Entwicklern brennend interessierte war:
Kann man mit VS-11 Programme für Windows XP entwickeln oder nicht?

Rede und Antwort stand in diesem Fall Steve Teixeira, als Director of Program Management. Also in diesem Fall jemand, der wirklich etwas sagen und auch mit zu entscheiden hat.

Ich gebe seine Antwort von Steve, auf diese Frage zusammengefasst wie folgt wieder:

  1. Zu dem Zeitpunkt als die Entscheidung für das Fallenlassen vom XP-Support gefällt wurde erschien dies als richtig.
    Jetzt muss man allerdings eingestehen, dass diese Entscheidung ein Fehler von Microsoft war.
  2. Die Benutzerzahlen wurden weiter als sinkend berechnet. Man vermutete, dass zum Zeitpunkt der Veröffentlichung von VS-11 noch maximal 20% XP-Nutzer vorhanden wären. Neue Umfragen gehen aber von einer Verbreitung von mindestens noch 46% Windows XP Installationen aus.
  3. Bei Microsoft wurde auch vermutet, dass es genügt den Entwicklern die neue VS-11 Oberfläche anzubieten aber das für das Compilieren das Toolset von VS-2010 genügen würde. Es wurde unterschätzt wie groß das Interesse an den neuen Compiler Funktionen in VS-11 mit C++11  ist. Was eben auch AMP und neue STL Funktionalität einschließt.
  4. Die Folge ist nun, dass Microsoft die Entscheidung für das Fallenlassen des Windows-XP Support neu überdenkt.
    Allerdings kann dies nicht mehr bis zum RTM geschafft werden.
    (Anmerkung von mir: Aktuell in der Beta wurde der gesamte Code, der die Windows-Vista/7 Funktionen isoliert entfernt und alle DLLs werden implizit geladen).

Möglich ist also, dass es ein Featurepack geben wird, dass nach dem RTM ausgeliefert wird, und in dem es dann doch einen XP Support in allen Bibliotheken und im Compiler gibt.

Die Antwort erschien mir ehrlich und geradeaus und war gewisslich keine Vertröstung ohne echten Hintergrund.
Ich weiß nicht wie groß wirklich die Chancen sind, aber diese Aussage deckt sich auch mit den „Gerüchten“, die ich um 5 Ecken gehört habe, und deckt sich auch mit der internen Diskussion, die mit den MVPs geführt wird.

Meine persönliche Schätzung ist eine 25 prozentige Chance, dass wir doch noch einen Windows-XP Support im VS-11 erhalten werden.

Lassen wir und überraschen. Aber es ist eine gute Nachricht ❗

PS: Ich schreibe dies direkt von der ADC für C++ 2012 in Ohlstadt.

Nachträge und Kommentare habe ich direkt in den Blog-Post übernommen, da diese manchmal übersehen werden:

Kommentar 1 vom 04.05.2012 von Steive Teixeira zur Klarstellung:

Hi Martin,
It was great to see you at ADC C++ this week! Just so that there is no confusion for the readers of your blog, the issue of XP support for C++ in Dev11 is one we’re taking very seriously, and we’re continuing to take customer feedback on Dev11 beta. However, we are not yet prepared to make an announcement on platform support for the RTM version of Dev11. We will be making an announcement on this in the coming weeks.
Thanks!
Steve

Kommentar 2 vom 04.05.2012 von Michael Kühlshammer 

Steve Teixeira schickte mir heute einen Link für einen Workaround und empfahl mir, dass möglichst viele Leute auf dem unten angegebenen Link einen Beitrag dazu schreiben sollen (dafür voten sollen), dass der VC11-Compiler auch Code für Windows XP erzeugt. Hier die Email-Antwort von Steve Teixeira:

“Thanks for your email. We continue to devote resources to and support MFC in Dev11. The Windows XP issue is still unsettled, and I appreciate your feedback on this. You me have seen that I posted some of my thoughts on XP support in the comment thread of this blog entry on the VC++ team blog: http://blogs.msdn.com/b/vcblog/archive/2012/04/18/10295093.aspx.

Thanks again,
Steve

RegisterActiveObject und CoLockObjectExternal

Wenn man ein COM Objekt erzeugt und dieses im System über die ROT (Running Object Table) sichtbar, dann sollte man normalerweise Weak-Locks benutzen. Das kann man auch in der Doku zu RegisterActiveObject  nachlesen. Ansonsten wird es schwierig zu entscheinden, wann man seine Objekte zerstören kann.

Wenn aber nun eine Anwendung sichtbar gemacht wird, also das Objekt vom Benutzer übernommen wird, dann darf es ja nicht beendet werden, wenn der externe Erzeugende Prozess beendet wird und die letzte Referenz zu dem Objekt beendet wird.

Wie verhindert man das?

Die Lösung ist relativ simpel. Solange die Anwendung sichtbar ist, oder besser, wenn sie sichtbar wird ruft man einmalig CoLockObjectExternal auf! Dadurch wird ein weitere Lock auf das Objekt ausgeführt.
Aber Achtung ❗ Hier wird keine Referenzzählung verwendet. Egal wie oft man CoLockObjectExternal aufruft, der Referenzzähler wird nur einmal erhöht.

Beendet der User das Programm entsperrt man das Objekt wieder. Sollten keine weiteren Objekte in der Anwendung benutzt werden, dann terminiert die Anwendung wenn man alles richtig gemacht hat 😉
Man ruft CoLockObjectExternal am Besten entweder auf, wenn die Anwendung sichtbar wird (WM_SHOWWINDOW) und erneut wenn WM_CLOSE aufgerufen wird. Die MFC macht alles fast automatisch richtig, bis eben auf die Aufrufe von CoLockObjectExternal, die man selbst im Code unterbringen muss, wie auch die Registrierung der Objekte in der ROT.
Ist noch eine externe Referenz vorhanden wird die Anwendung nicht terminiert, weil der interne Objektzähler der MFC dies verhindert (Code in CFrameWnd::OnClose). Ist kein externer Lock mehr vorhanden sperrt CoLockObjectExternal die Anwendung vom terminieren weil damit exakt eine Referenz aufrecht erhalten wird. Wird durch den Benutzer das Schließen der Anwednung angefordert wird dann im WM_CLOSE diese letzte Refrenz aufgelöst und die Anwednung kann terminieren auch wnen noch ein Eintrag in der ROT vorhanden ist. Dieser wird dann beim Beenden der Applikation auch entfernt.