Archive for March, 2009

WebService in native Code (WS-*)

Monday, March 30th, 2009

After the support for the SOAP-Toolkit was retired, there was no library from Microsoft, to write or consume Web-Services in native code. The suggested solution was to move to the .NET-SOAP classes. Of course, this is not always a solution, for big native code-bases.

It seems that MS has reflected this situation and also has found, that it is a “must have” to have a native WS-* library.

Starting with Windows 7 and Windoes Server 2008 R2, the OSwill have build-in support for native Web-Services.

The APIis called WWS-API (Windows Web Service API). To get an overview and also some examples, you can take a look at the code.msdn-Site.

Also, if you have an existing application and want to move to WWSAPI, you can join a virtual lab, to get help in implementing your web-service (either consuming or exposing).

EDIT:
Nikola added an comment, that WWSAPI will be also available on XP-SP2 and later! These are really great news!
You can already download the beta-bits, see:
Release of WWSAPI beta for Windows XP, Vista, Server 2003 and Server 2008

IE8 smashes Visual Studio 2005 / 2008 Class-Wizard

Sunday, March 29th, 2009

It seems that the new IE8 has some conflicts with Visual Studio 2008 (incl. SP1). After you installed IE8, you are not able to use the call-wizard for MFC projects anymore. It always gives you an error that there is a bug on the page:
Visual Studio 2008 bug after installing IE8

Currently there is a workaround, until a “real” fix is present:

  • Open regedit
  • Under HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings \ Zones
    create a new key called 1000 (if it isn’t already there)
  • Under 1000, create a DWORD entry with:
    • Name = 1207
    • Type = REG_DWORD
    • Data = 0×000000

Visual Studio 2008 hotfix for IE8

You can also download the zipped reg-file.

Just for completeness: There is a connect entry since 9 days…

Addition: The problem also occurs with VS2005 (and maybe earlier versions ;) )

More infos is available from the VC-Teamblog.

Change of Win-API semantics via application manifest!

Wednesday, March 18th, 2009

Starting with Windows 7, the application manifest is becoming more and more important.

In Windows Vista, you need a manifest to bypass the application virtualization. In Window 7, you need a specific application compatibility-manifest to get correct API function behaviour ;)
For example, a race condition in GetOverlappedResult is only solved, if you explicit specify in your manifest, that you want a correct behaviour of this function.
Also a bug in CreateFileEx is only solved if you specify this in your manifest.

Of course, this is in general not a bad idea. But the manifest only allows to enable all new features or nothing. There is no way to exlicit enable only one of the bugfixes.

Here is just a small document of the “Windows 7 - Application Manifests - Compatibility”.

Windows Communication Protocols

Friday, March 13th, 2009

Microsoft is publishing many of their “closed” protocols on the internet.
The starting site is: Microsoft Protocol Programs and Open Specifications.

Here is just a small list of available protocol downloads:

Building vcproj-Files with msbuild

Thursday, March 12th, 2009

If you want to batch-build VC++ projects you can either use devenv or msbuild.
msbuild has many option in which you can change and log the build process.

Here is just a example of a simple .proj-template for starting of batch-builds with msbuild:

<Project 
  DefaultTargets="Rebuild" 
  ToolsVersion="2.0" 
  Verbosity="detailed" 
  xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
  <ItemGroup> 
    <Project Include="Project1Directory\Project1.vcproj" /> 
    <Project Include="Project2Directory\Project2.vcproj" /> 
    <!-- and so on --> 
  </ItemGroup> 
  <Target Name="Rebuild"> 
    <VCBuild 
      Projects="@(Project)" 
      Configuration="Debug|Win32" 
      Rebuild="true" 
      ContinueOnError="false" 
    /> 
    <VCBuild 
      Projects="@(Project)" 
      Configuration="Release|Win32" 
      Rebuild="true" 
      ContinueOnError="false" 
    /> 
  </Target> 
  <Target Name="Build"> 
    <VCBuild 
      Projects="@(Project)" 
      Configuration="Debug|Win32" 
      ContinueOnError="false" 
    /> 
    <VCBuild 
      Projects="@(Project)" 
      Configuration="Release|Win32" 
      ContinueOnError="false" 
    /> 
  </Target> 
  <Target Name="Clean"> 
    <VCBuild 
      Projects="@(Project)" 
      Configuration="Debug|Win32" 
      Clean="true" 
      ContinueOnError="false" 
    /> 
    <VCBuild 
      Projects="@(Project)" 
      Configuration="Release|Win32" 
      Clean="true" 
      ContinueOnError="false" 
    /> 
  </Target> 
</Project>

You need just to save this file with the extension .proj” and call “msbuild” from the same directory. It will then do a “Rebuild” (see “DefaultTargets”).
Or you can do a “Clean” with “msbuild /t:Clean”.
You can also log to a file with “msbuild /v:d /fileLogger”.
Also, if you do not need a specific build-order of your projects, you can just include every vcproj-File in your subfolders by changing

  <ItemGroup> 
    <Project Include="Project1Directory\Project1.vcproj" /> 
    <Project Include="Project2Directory\Project2.vcproj" /> 
    <!-- and so on --> 
  </ItemGroup>

to

  <ItemGroup> 
    <Project Include="**\*.vcproj" /> 
  </ItemGroup>

Also, msbuild returns 0 if the build was sucessfull, otherwise “1″. So you can determine the result of the build in your batch-files.

So you can see: msbuild is very powerfull…

All-in-One Code Framework

Thursday, March 12th, 2009

If you need examples of some of the current Microsoft technologies, you have many technologies and programming languages available. For each of these technologies/languages you need to find a fitting example.

On CodePlex there is now an example-collection for most of the available technologies (COM, ActiveX-Control, ActiveX-Host, ADO, ADO.NET, Outlook-Customizing, DLL, DLL-delay-loaded, LIB, P/Invoke, CLR-hosting / named-pipes, mailslots, shared-memory, remoting) and programming languages (C/C++ (native / MFC / ATL) / C# / VB.NET):

Check out: All-In-One Code Framework