Le problème avec Win32

Sébastien Aperghis-Tramoni, sebastien@aperghis.net

Le problème

  • Windows c'est de la m...

  • </troll> ;-)

Le vrai problème

  • Windows est dur (API baroque, documentation irrégulière)

    • MSDN contient beaucoup d'informations, mais son moteur de recherche et son traducteur automatique sont très bons pour les cacher

  • Windows n'est pas disponible librement

    • Lequel arrivera en premier : un ReactOS utilisable ou un Windows gratuit ?

Le vrai problème

  • Les compilateurs et outils Windows n'étaient pas disponibles gratuitement pendant très longtemps

    • Microsoft offre maintenant Visual C++, mais bien sûr n'en parlent null part sauf sur une page cachée. Aussi disponibles, les compilateurs Borland BCC et Watcom.

  • Windows est pour x86 seulement

    • Certains sysadmins peuvent se souvenir des temps anciens où NT4 était disponible sur PowerPC, MIPS, Alpha and HP-PA.

Solution

  • Réaliser qu'on n'a pas besoin de se soucier de ça

  • API Windows est fournit en Perl par les modules Win32, Win32::* et Win32API::*

  • Donc il suffit de simuler ces modules

Win32::Mock

  • Réimplémentation en pur Perl des fonctions et modules Win32

  • Permet une instrumentation (très pratique pour les tests)

  • N'interfère pas avec les vrais modules Win32

Exemple

  •     use Win32::Mock;
        # @INC a maintenant été modifié pour rendre visible
        # les modules Win32 simulés
  •     use Win32;
  •     printf "This is Perl $] (build %s) on %s, running on host %s\n", 
            Win32::BuildNumber(), ~~Win32::GetOSName(), Win32::NodeName();

Code source

  • Le code source complet de Win32::Mock

  •     package Win32::Mock;
        $VERSION = '0.02';
        use strict;
        use File::Basename;
        use File::Spec::Functions;
        use Devel::FakeOSName "Win32/\u$^O";
        use lib catdir(dirname($INC{"Win32/Mock.pm"}), "Mock");
    
        1
    
        __END__

Disponibilité