Category Archives: Win32

VS2012 Update 1 verfügbar

Ab sofort ist das erste Update für Visual Studio 2012 verfügbar!
Es bringt für VC++ primär die Unterstützung für XP-SP3 mit, was ein großer Fortschritt ist.

Download: Visual Studio 2012 Update 1 – Multi-language
Offline-Installation: How to: Install Visual Studio 2012 Update 1 Offline

Mehr Infos zu VS2012 Update 1:

Nur als kleiner Hinweis: Die Unterstützung für XP-SP3 betrifft nur VC++ 2012, nicht aber .NET-Framework 4.5! Dies ist immer noch auf Vista und höher begrenzt!

Ändern des .NET TargetFrameworks in VS2012 für C++/CLI Projekte

Leider ist es immer noch nicht möglich in VS2012 die .NET-Version für C++/CLI Projekte direkt anzupassen. Schon in VS2010 war dazu eine Änderung in der .vcproj-Datei notwendig. Das gleiche muss man jetzt in VS2012, wenn man eine andere Version verwenden will:

 <PropertyGroup Label="Globals">
    <ProjectGuid>...</ProjectGuid>
    <Keyword>...</Keyword>
    <RootNamespace>CPP_VS2012</RootNamespace>
    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
  </PropertyGroup>

Die Werte für “TargetFrameworkVersion” können sein:

  • v2.0
  • v3.0
  • v3.5
  • v4.0
  • v4.5

Breaking changes in VC2012

Jetzt gibt es eine Liste der “Breaking changes in VC 2012“. Darunter gibt es auch den Folgenden Eintrag:

The following project templates no longer exist:

  • Windows Forms Application
  • Windows Forms Control Library

Although we recommend that you do not create Windows Forms applications in C++/CLI, maintenance of existing C++/CLI UI applications is supported. If you have to create a Windows Forms application, or any other .NET UI application, use C# or Visual Basic. Use C++/CLI for interoperability purposes only.

So langsam fühle ich mich bestätigt, dass es gut war vor C++/CLI als Sprache für WinForms zu warnen (http://blog.kalmbach-software.de/de/2010/03/05/ccli-und-winforms-macht-keinen-sinn/).

Microsoft C++ Days in Deutschland!

C++ ist noch lange nicht tot! Microsoft hat in den letzten Jahren wieder mehr Resourcen in diesen Bereich investiert. Um wieder mehr auf diesen Bereich aufmerksam zu machen bzw. sich mal weider zu Informieren, was es alles gibt, solltest Du unbedingt auf einen der C++ Days gehen. Das beste dabei ist, das Ganze ist kostenlos! Also, gleich Anmelden:

  • 2.2.2012 14:00- 18:00 Berlin (ausgebucht)
  • 7.2.2012 14:00- 18:00 Bad Homburg (noch freie Plätze!)
  • 13.2.2012 14:00- 18:00 Karlsruhe (noch freie Plätze!)
  • 5.3.2012 14:00- 18:00 Köln (ausgebucht)

Mehr Infos unter:
http://blogs.msdn.com/b/cbinder/archive/2011/12/29/c-entwickler-uptodate-microsoft-c-day-2012.aspx

Infos über VC2011 (Developer Preview)

Seit kurzem sind die Hilfeseiten für VS2011 online.

Dabei sind auch die Neuigkeiten für VC 2011 aufgeführt.

Der Blick ist wirklich lohnentswert.

Das neue VS kann man sich auch schon zusammen mit Windows 8 runterladen:
http://msdn.microsoft.com/en-us/windows/apps/br229516

Wer es in einer VM installieren möchte muss das neue VMWare 8 nehmen, da es in VMWare 7.1.4 wohl nicht geht (siehe hier ).

VHD mit VS2010 SP1 / TFS und vielen Hand-On-Labs

Wer mal VS2010 SP1 Ultimate kostenlos testen will und dabei auh noch einige Hand-On-Labs machen will (incl. TFS Labs), der kann sich die VHD hier rinterladen:

http://blogs.msdn.com/b/briankel/archive/2010/06/25/now-available-visual-studio-2010-rtm-virtual-machine-with-sample-data-and-hands-on-labs.aspx

Ein kleiner Hinweis noch: Das Windows läuft am 1.November 2011 ab…

VS2010 SP1 – Achtung bei installiertem Windows SDK v7.1!

Wer neben der Installation von VS2010 (Express oder Professional) auch noch das separate Windows SDK v7.1 installiert hat, der sollte das VS2010 SP1 nicht installieren!
Wenn man das SP1 installiert so werden die Compiler und C++ Libraries der IA64/x64 Komponenten gelöscht!
Es scheint so, als ob die Premium und Ultimate-Versionen davon nicht betroffen sind.

Mehr dazu siehe:
Visual Studio 2010 Service Pack 1 and Windows SDK for Windows 7 and .NET Framework 4 Issue

Update (2011-03-31):
Es gibt wohl ein Hotfix dazu. Siehe:
Microsoft Visual C++ 2010 Service Pack 1 Compiler Update for the Windows SDK 7.1

Edit- and Continue mit “Multitargeting” in VS2010

Mit VS2010 wurde für VC++ das “Multi-Targeting” eingeführt. Damit kann man mit VS2010 entwickeln, aber trotzdem noch z.B. die Compiler/Linker von VS2008 verwenden. Das funktioniert auch ganz gut… Jetzt ist aber einem Kollegen von mir aufgefallen, dass bei einem Projekt wo dies so eingestellt ist, das Edit- and Continue im Debug-Mode wohl nicht mehr funktioniert.

Das scheint also leider ein Bug zu sein. Wenn das Toolset “v100” ist, so geht alles; wenn man es umstellt auf “v90” so geht das Edit- and C>ontinue nicht mehr. Sehr Schade… das erschwert natürlich die Entwicklung etwas wenn man sich mal daran gewöhnt hat 😉

Hier der Link zu dem Eintrag auf Connect:
https://connect.microsoft.com/VisualStudio/feedback/details/647971/

RegFree COM Activation und Pfad zu einem anderen Verzeichnis / Unit-Tests

Ich hatte hier das Problem, dass wir in einen VIsual Studio Unit Test eine COM-DLL verwenden müssen. Diesen wollen wir aber nicht auf dem Build-Server registrieren. Um dies zu umgehen, hab ich mittels CreateActCtx / ActivateCtx / usw. eine Klasse gemacht, mit der man ein Manifest zur Laufzeit aktivieren kann. Jetzt war aber das Hauptproblem, dass die Unit-Tests ja von einer Applikation ausgeführt werden, auf dessen Verzeichnis wir keinen Zugriff haben. Im Internet hab ich aber immer nur Beispiele gefunden, wo die COM-DLL im gleichen Verzeichnis wie die EXE lag. Dies geht hier aber nicht, sondern die DLL muss mit einem “DeployItem” auch in das entsprechende Out-Verzeichnis kopiert werden und von dort muss diese COM-DLL dann geladen werden. D.h. das Manifest muss auf diese Datei zeigen.
Ich hab das nicht hinbekommen…. mein erster Versuch war das “lpAssemblyDirectory” Feld in der ACTCTX Struktur zu setzen. Damit hab ich es aber nicht hinbekommen; hab alles erdenkliche versucht… er hat immer gemeldet, dass er die Datei nicht finden kann…
Dann hab ich es in der Manifest-Datei selber probiert. Dort hab ich es nur hinbekommen, wenn der <file name="NameDer.dll"> auf den relativen Pfad geändert hab, also: <file name="test\NameDer.dll">.
Aber sobald ich einen vollständigen Pfad angegeben hab, ging es nicht mehr… ich bin fast verzweifelt…
Dann endlich kam ich drauf (keine Ahnung wie): Man muss den ganzen Pfad angeben, aber für jeden Slash jeweils *zwei* einfügen! Also:
<file name="C:\\Temp\\Test\\NameDer.dll">
Und siehe da: Es funktioniert, auch wenn die DLL nicht im entsprechenden EXE-Verzeichnis liegt.

Somit können wir jetzt Unit Tests erzeugen, welche eigentlich eine Registrierung von COM-DLLs auf dem Server verlangt hätten.

Mehr Infos dazu siehe:
https://cfx.svn.codeplex.com/svn/Visual%20Studio%202008/CSRegFreeCOMClient/Program.cs
http://www.mazecomputer.com/sxs/help/sxsapi2.htm

Ändern des .NET TargetFrameworks in VS2010 für C++/CLI Projekte

Leider gibt es in VS2010 bei C++/CLI Projekten keine Möglichkeite durch die Projekt-Eigenschaften einzustellen, welche .NET Version bei einem C++/CLI Projekt (/clr) verwendet werden soll.
Die einzige Möglichkeit ist es, dies direkt in der *.vcxproj-Datei vorzunehmen. Dazu sind Folgende Schritte notwendig:

  1. Rechst-Klick auf das entsprechende Projekt im Solution Explorer und dann auf “Unload project” klicken
  2. Dann nochmals ein Rechts-Klick auf das entladene Projekt im Solution Explorer und “Edit .vcxproj” auswählen
  3. In the Projekt XML Datei nach dem Knoten suchen
  4. In diesem Knoten nach dem Unterknoten such (wenn er nicht existiert muss man ihn hinzufüügen)
  5. Der innere Text des Knotens definiert nun das TargetFramework. Es kann die Werte v2.0,v3.0, v3.5 oder v4.0 annehmen
  6. Speichere die vcxproj Datei und schliesse sie
  7. Dann nochmals ein Rechts-Klick auf das entladene Projekt im Solution Explorer und “Reload Project” auswählen

Beispiel:

  <PropertyGroup Label="Globals">
    <ProjectGuid>{089A9EBF-5149-462A-BC7E-2B1B59DE123C}</ProjectGuid>
    <Keyword>Win32Proj</Keyword>
    <RootNamespace>CPP_VS2010</RootNamespace>
    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
  </PropertyGroup>

VS2010 SP1-beta verfügbar

Die Beta Version des VS2010 SP1 ist nun für alle Verfügbar. Wie immer gilt der Hinweis, dass man dies nicht auf einem Produktivsystem installieren sollte. Wobei diesmal aber auch eine “Go Live” Lizenz dabei ist; d.h. man darf es auch produktiv verteilen!

Das C++ Produkt-Team hat auch noch detailiertere Infos, was sich im C++ Bereich getan hat:
VS2010 SP1 Beta: What’s in It for C++ Developers
Die Hauptneuigkeit dürfte wohl sein, dass es wieder einen lokalen Help-Viewer gibt…

Und wer noch gleich Feedback geben will, kann das hier tun:
Visual Studio 2010 Service Pack 1 Beta Survey

LowLevel Hooks sind böse

Es gibt ja viele, die stehen auf Hooks. Es gibt auch sog. LowLevel Hooks, welche keine DLL benötigen, sondern im Kontext des Prozesses (Threads) laufen, welche das SetWindowsHookEx aufgerufen hat.
Das Problem ist nun bei solchen Hooks, das diese in der Vergangenheit sehr oft zu Verzögerungen im ganzen Windows System geführt haben, wenn ein Hook in der Callback etwas länger gebraucht hat oder sonstwie Fehler gehabt hat.

Dies hat MS nun versucht zu in Windows 7 (RTM) beheben. Die Lösung ist einfach:
Der Hook wird einfach entfernt, wenn er 11 Mal länger als 300 ms gebraucht hat 😉 (wobei ich 300 ms immer noch sehr lang finde…)

Siehe auch: Global hooks getting lost on Windows 7

C++/CLI Programme auf einem anderen Rechner ausführen (VC2010)

In Foren kommt oft die Frage: Mein C++/CLI Programm läuft nicht auf anderen Rechner! Was brauche ich damit es läuft?

Die Frage ist einfach zu beantworten, wenn wir davon ausgehen, dass das Programm mit VS2010 (Beitrag für VS2008 gibt es hier) erstellt wurde:

  1. Zuerst wird das .NET Framework benötigt (da C++/CLI ja die CLR verwendet). Aktuell ist dies für VC2010 die Version 4.0:
    .NET 4.0 (Full download)

  2. Und da Du C++/CLI (also C++) verwendet hast, benötigst Du noch die C-Runtime DLLs, da C++/CLI (CLR) nur mit der DLL-Version der C-Runtime (CRT) verwendet werden kann:
    VC2010 (x86)
    In dem seltenen Fall, dass man die Application als x64 übersetzt hat benötigt man diese CRT-Version: VC2010 Runtime x64

PS: Falls man kein CLI (CLR / .NET) verwendet hat, so ist es meistens einfacher, wenn man statisch gegen die CRT linkt!

PPS: Auch sollte man beachten, dass es oft keinen Sinn macht C++/CLI zu verwenden. Das ist wirklich nur für InterOp gedacht!

Letztes PSDK für VC6

Es soll ja immer noch Leute geben, die VC6 verwenden. Die Gründe sind in den meisten Fällen Altprojekte, welche man eigentlich nie wieder anfassen wollte… und irgendwann muss man dann doch noch was anpassen.
Dazu werden dann oft neuere Methoden benötigt, die im mitgelieferten PSDK von VC6 nicht dabei sind. Das letzte PSDK, welches noch VC6 unterstützt ist von Februar 2003. Bei den darauf folgenden PSDKs hat sich teilweise das Format geändert und es lässt sich nicht mehr korrekt linken. Deshalb rate ich auch niemandem in VC6 ein anderes PSDK zu verwenden, als max. Februar 2003.

Bis vor einiger Zeit gab es auch noch eine offizielle Seite um das PSDK runterzuladen:
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm

Diese wurde aber wohl jetzt abgeschaltet…
Glücklicherweise sind die Dateien für den Download aber immer noch da:

PSDK-FULL.1.cab
PSDK-FULL.2.cab
PSDK-FULL.3.cab
PSDK-FULL.4.cab
PSDK-FULL.5.cab
PSDK-FULL.6.cab
PSDK-FULL.7.cab
PSDK-FULL.8.cab
PSDK-FULL.9.cab
PSDK-FULL.10.cab
PSDK-FULL.11.cab
PSDK-FULL.12.cab
PSDK-FULL.13.cab
PSDK-FULL.bat
extract.exe

Man muss die Dateien in ein Verzeichnis downloaden und dann die Batch-Datei ausführen. Dann erhält man das Setup 😉

SQL Server 2008 R2 Express jetzt mit 10 GB Database limit

Ab sofort gibt es den aktualisierten SQL Server 2008 R2 Express zum konstenlos runterladen.
Eines der wichtigesten neuerung der Express Edition dürfte wohl die erhöhung des Datenabnk-Größe-Limits von 4 GB auf 10 GB sein 😉
Hier der Link zur SQL 2008 R2 Express Startseite
http://www.microsoft.com/express/Database/

Download x86 Edition (235 MB)
Download x64 Edition (247 MB)

Sharepoint Foundation 2010 verfügbar

Ich bin schon länger ein Fan von Sharepoint und verwendet dies auch für mehrere interne Projekte.
Seit einigen Tagen ist jetzt auch der Nachfolger der “Sharepoint Services 3.0” verfügbar (natürlich immer noch kostenlos). Aber natürlich mit einem neuen Namen:
Sharepoint Foundation 2010

Der einzige Nachteil des Nachfolgers ist, dass es nur noch auf einem x64 System installiert werden kann.
Wenn man es auch auf einem Entwicklungsrechner installieren will, so kann man es auf Vista (SP1-x64) oder Win7 (x64) installieren. Produktiv wird dies aber nicht unterstützt.
Hier wird dann schon mehr verlangt:

  • x64 – 4 cores
  • 8 GB RAM
  • 80 GB HD

Zusätzliche Include-Pfad in VC++ 2010

Bis VS2008 konnte man zusätzliche Include-Pfad für den aktuellen Benutzer einfach hinzufügen, indem man einfach die nötigen Verzeichnisse unter “Tools|Options|Projects and Solutions|VC++ Directories” eingetragen hat. Dies sieht per Default so aus:
VS2008 Include Verzeichnisse

Ab VS2010 sieht man an dieser Stelle nur noch:
VS2010 Include Verzeichnisse

Der Grund hinter der Änderung liegt daran, dass ab VS2010 die IDE das “Multi-Targeting” unterstützt. D.h. man kann mit der gleichen IDE z.B. für VS2010 und auch für VS2008 compilieren! Deshalb kann man natürlich die C++ Pfade nicht mehr der IDE zuordnen, sondern diese müssen dem jeweiligen Projekt zugeordnet sein.

Man kann aber auch weiterhin Pfad Benutzerspezifisch hinzufügen. Dies wird dann über Property-Sheets realisiert. Dies zu finden, ist aber etwas komplizierter, deshlab hier eine kurze Erklärung:

  1. Öffne irgendein VC++ Projekt
  2. Zeige den Property-Manager an (View|Other Windows|Property Manager)
  3. Expandiere die Knoten dort (i.d.R. Debug/Release)
  4. Wähle dort alle Einträge mit “Microsoft.cpp..user” aus (Multi-Select)
  5. Dann ein rechter Mausklick auf eine der Selektionen und “Properties” auswählen
  6. In dem Dialog kannst Du nun “Common Properties|VC++ Directories” auswählen und dort die entsprechenden Einträge hinzufügen.
    VS2010 Include Verzeichnisse - Neu

  7. Ich persönlich würde links die Dropdown-Liste auswählen und dort dann Edit drücken und die Pfade in dem dann Folgenden Dialog eingeben.

Noch mehr Infos zum Upgrade auf VS2010 gibt es hier:
Visual Studio 2010 C++ Project Upgrade Guide

Anmerkung: Es sei noch erwähnt, dass man zusätzliche Include-Pfad für ein Projekt immer noch in den Projekteinstellungen vornehmen kann! Dazu sind diese Anpassungen NICHT nötig!

Anmerkung2: Um bei der Express Version den Property-Manager zu sehen, muss man erst die Expertenansicht aktivieren:

Tools | Setting | Expert settings

Wünsche/Anregungen für VC++???

Jetzt kommt ja bald VS2010 heraus…. und wie bei MS so üblich, verabschieded sich jetzt das Produkteam von der (dann) aktuellen Version und pplant schon die nächste Version (VS2012?).
Wer hierzu speziell im VC++ Bereich sein Feedback einfliessen lassen will, der kann dies mit einem Fragebogen vom Produkt-Team tun:
http://blogs.msdn.com/vcblog/archive/2010/03/22/vc-developer-survey.aspx

Ich kann es wirklich nur jemdem empfehlen daran teilzunehmen, der auch zukünftig noch VC++ einsetzen will!