=head1 INSTALLATION - Windows VC 8.0 details

Installation of the MQSeries module normnally requires the steps

  perl Makefile.PL
  make
  make test
  make install

However, if you are using Visual C++ 8.0 (Visual Studio 2005 or
later), while your version of perl was built with an earlier release
of Visual C++, you may need to perform additional tasks after the
"make" step.  The symptoms you'll see is that, when perl tries to load
the MQSeries DLL, it cannot find the C runtime library, MSVCR80.dll.

=head2 Background

When you build an application or DLL with Microsoft VC 8.0 you require
the C runtime library, MSVCR80.dll.

With previous releases of Visual C++ the corresponding DLL would
either be added to the search path or installed in
C:\windows\system32.  Visual C++ 8.0 supports multiple versions of
these libraries and no longer allows you to add them to the search
path; instead, the libraries are installed in the Side-by-Side (SxS)
directory and accessed by their UUID.

 dir C:\WINDOWS\WinSxS

 Volume in drive C has no label.

 Volume Serial Number is 64C5-B42B

 Directory of C:\WINDOWS\WinSxS

    11/01/2008  22:24    <DIR>          .
    11/01/2008  22:24    <DIR>          ..
    08/10/2007  19:23    <DIR>          InstallTemp
    11/01/2008  22:24    <DIR>          Manifests
    08/10/2007  18:49    <DIR>          Policies
    08/10/2007  18:49    <DIR> x86_Microsoft.VC80.ATL_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_6e805841
    10/10/2007  08:50    <DIR> x86_Microsoft.VC80.ATL_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_cbb27474
    08/10/2007  18:49    <DIR> x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_0de06acd
    10/10/2007  08:50    <DIR> x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700
    08/10/2007  18:49    <DIR> x86_Microsoft.VC80.MFCLOC_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_3415f6d0
    10/10/2007  08:50    <DIR> x86_Microsoft.VC80.MFCLOC_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_91481303
    08/10/2007  18:49    <DIR> x86_Microsoft.VC80.MFC_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_dec6ddd2
    10/10/2007  08:50    <DIR> x86_Microsoft.VC80.MFC_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_3bf8fa05

If you look in one of these directories, you'll see the DLL:

 dir C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_0de06acd

 Volume in drive C has no label.
 Volume Serial Number is 64C5-B42B

 Directory of C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_0de06acd

    08/10/2007  18:49    <DIR>          .
    08/10/2007  18:49    <DIR>          ..
    22/09/2005  22:48           479,232 msvcm80.dll
    22/09/2005  22:48           548,864 msvcp80.dll
    22/09/2005  22:48           626,688 msvcr80.dll

=head2 Making the MQSeries DLL work

Adding the relevant SxS directory to the search path won't help - the
program loader will not load the MQSeries DLL.  The only way to access
the versioned MSVCR80.DLL is by creating a manifest file.

The manifest file must be called MQSeries.dll.manifest and have a
content like the one below (you will have to adjust the UUID to match
your system):

  <?xml version='1.0' encoding='UTF-8' standalone='yes'?>
  <assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
    <dependency>
      <dependentAssembly>
        <assemblyIdentity type='win32' name='Microsoft.VC80.CRT' version='8.0.50608.0' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
      </dependentAssembly>
    </dependency>
  </assembly>

We have had reports that the manifest file can be stored in the same
directory as the perl binary or the same directory as the MQSeries
DLL, but ideally it should be embedded into the MQSeries DLL.

This latter step is performed using C<mt.exe>:

  http://msdn2.microsoft.com/en-us/library/ms235591(VS.80).aspx

=head2 Finally

These manifest issues only occur when both Visual C++ 8 and an earlier
release are used to build different components of your system.  If
both perl and the MQSeries package are compiled with either Visual C++
8 or an earlier release, you will not have any issue; but if perl
itself is built using Visual C++ 7 and you try to build the MQSeries
extension using Visual C++ 8, then you have to create the manifest
file and embed it into MQSeries.dll using C<mt.exe>.