Utiliser JEDI-SDL sous Codegear Delphi 2009

Avant Propos

Cette présentation point à point a pour but de dépanner rapidement ceux qui essaieraient de créer un programme SDL sous Delphi 2009 avec le portage du projet JEDI.

Introduction

Comme tous les utilisateurs de Delphi 2009 auront pu s'en apercevoir, il n'est pas possible de créer un projet JEDI-SDL fonctionnel "out of the box". Si vous êtes dans le cas où la compilation est parsemée d'erreurs (telle constante non définie, etc...), que le programme plante lors d'un SDL_putenv() ou que le changement du titre de votre fenêtre SDL ne prend en compte que le premier caractère, vous êtes dans le cas typique d'un problème de portage.

Compilation sous Delphi 2009

Pour outrepasser tous les problèmes de compilation que vous pourriez avoir à cause du portage JEDI pour Delphi 2009 (qui n'est pas encore supporté, d'ailleurs), la solution consiste à examiner le fichier jedi-sdl.inc (dans le répertoire des sources SDL). En effet, ce fichier comporte une section de définition de symboles en fonction de chaque version de Delphi, or la dernière (version 200) n'est pas encore inscrite. Il s'agit de repérer la section

{$IFDEF ver185}
{$DEFINE Delphi} {Delphi 2007}
{$DEFINE Delphi32}
{$DEFINE Delphi4UP}
{$DEFINE Delphi5UP}
{$DEFINE Delphi6UP}
{$DEFINE Delphi7UP}
{$DEFINE Delphi8UP}
{$DEFINE Delphi9UP}
{$DEFINE Delphi10UP}
{$WARN UNSAFE_TYPE OFF} {Disable warning for unsafe types in Delphi 7}
{$DEFINE Has_Int64}
{$DEFINE HAS_TYPES}
{$ENDIF ver185}

et de rajouter à la suite cette section :

{$IFDEF ver200}
{$DEFINE Delphi} {Delphi 2009}
{$DEFINE Delphi32}
{$DEFINE Delphi4UP}
{$DEFINE Delphi5UP}
{$DEFINE Delphi6UP}
{$DEFINE Delphi7UP}
{$DEFINE Delphi8UP}
{$DEFINE Delphi9UP}
{$DEFINE Delphi10UP}
{$WARN UNSAFE_TYPE OFF} {Disable warning for unsafe types in Delphi 7}
{$DEFINE Has_Int64}
{$DEFINE HAS_TYPES}
{$ENDIF ver200}

En pensant évidemment à ajouter les sources JEDI-SDL dans les répertoires du projet, la compilation devrait maintenant se faire sans accrocs.

Chaînes de caractères sous Delphi 2009

Delphi 2009, entre autres améliorations, apporte une chose fondamentalement nouvelle sur la table : une gestion native des caractères UNICODE. Le type string, désormais, est un alias vers le type WideString, qui est une structure de caractères UNICODE. Auparavant, Delphi utilisait le type AnsiString, qui passait parfaitement sous SDL moyennant un transtypage en PChar (ou PAnsiChar). Or désormais, même le type PChar (tableau de caractères à zéro terminal) est un alias vers le type PWideChar. Il faut donc penser que toute string passée à SDL doit être déclarée comme AnsiString au préalable sous Delphi, PUIS transtypée en PAnsiChar au moment de l'appel.
Comme dans cet exemple :

procedure Dummy;
var 
    name : AnsiString;
begin
    name := 'Projet SDL';
    SDL_WM_SetCaption(PAnsiChar(name), nil);
end;

De cette manière, vos projets devraient compiler ET exécuter correctement ... en attendant le support officiel du projet JEDI-SDL!

Ce document intitulé « Utiliser JEDI-SDL sous Codegear Delphi 2009 » issu de CodeS SourceS (codes-sources.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Rejoignez-nous