Recherche sur le blog

vendredi 26 décembre 2014

[Jeux vidéo] Xbox Live & PSN inaccessibles à Noël

Si vous n'avez pas pu jouer en ligne le jour de Noël, il semblerait que cela soit dû à une attaque DDoS. Le groupe de hackers Lizard Squad a d'ailleurs revendiqué celle-ci. Dommage pour ceux qui venaient de déballer leur cadeau tout beau tout propre et qui malheureusement n'ont pas pu en profiter. A l'heure actuelle les services en ligne de Sony et Microsoft rencontrent encore quelques difficultés mais cela devrait bientôt être rentré dans l'ordre.


Sources

jeudi 25 décembre 2014

[Info] Joyeuses fêtes de fin d'année

Je profite de ce petit jour férié pour vous souhaiter de joyeuses fêtes de fin d'année. Vous êtes de plus en plus nombreux à visiter mon blog et ça, c'est super motivant ! Profitez bien et attention à ne pas rouler sous les tables en fin de repas...


mardi 23 décembre 2014

[SQL] Mémo - Modifier le type d'une colonne

Pour modifier le type d'une colonne dans une table DB2/400, vous pouvez utiliser la syntaxe ALTER TABLE ... ALTER COLUMN. Il faudra cependant spécifier une clause supplémentaire : SET DATA TYPE. Cela vous permettra de changer la taille par exemple, ou bien passer d'un entier sur 4 octets à un entier sur 8. Exemple : 
ALTER COLUMN biblio.table ALTER COLUMN email 
SET DATA TYPE varchar(50);
Dans cet exemple nous modifions la colonne qui contient l'e-mail en indiquant qu'on souhaite une chaine de caractères à taille variable d'un maximum de 50 caractères. Dans SQL Server, cela donnerait quelque chose comme ceci : 
ALTER COLUMN schema.table ALTER COLUMN email varchar(50);
Et dans Oracle ou même MySQL :
ALTER COLUMN schema.table MODIFIY COLUMN email varchar(50);
Bon développement !

jeudi 18 décembre 2014

[Astuces] Récupérer une image Windows 8.1

Avec Windows 8.1 il est possible de créer et de restaurer une image de votre disque dur. La première étape consiste à générer cette image et à la sauvegarder sur un support (DVD, périphérique externe USB, ou partage réseau). Windows sauvegardera tous les éléments du disque et même la structure des partitions. Voilà pourquoi on appelle cela une "image" puisque il s'agit d'une copie complète. La seconde étape consiste à créer un support de récupération, qui va proposer tous les outils nécessaires pour restaurer l'image. Il faudra donc démarrer sur ce support, qui sera obligatoirement une clé USB, afin d'effectuer l'opération de restauration.

Étape 1 - Créer une image système

Préparez quelques DVD ou bien un disque dur externe. Nous vous recommandons d'utiliser un périphérique externe car l'image risque de consommer beaucoup d'espace, en fonction de la quantité de données et des programmes présents sur votre ordinateur. Vous pouvez également utiliser un emplacement réseau si vous êtes en entreprise et que vous prévoyez de sauvegarder vos images sur un serveur spécifique.

Pour créer une image système, il faut se rendre dans le panneau de configuration (ex : via le raccourci Windows+X puis option "Panneau de configuration"), puis "Historique des fichiers". En bas à gauche, choisissez "Sauvegarde d'image système".


Ensuite, sélectionnez le support de votre choix (disque externe, DVD ou réseau). Nous décidons de créer l'image sur un disque externe. Celle-ci sera créée à la racine dans un sous-répertoire "WindowsImageBackup". Rien ne sera effacé lors de cette procédure : on peut donc effectuer des sauvegardes de plusieurs machines. Les images sont "triées" par nom de PC et par date.


Cliquez sur "Suivant" pour continuer. L'écran suivant vous indique quelles seront les partitions sauvegardées. Par défaut on a donc "System" et "C:\". Windows vous indique aussi l'espace nécessaire à la sauvegarde avant de la créer. Lorsque vous êtes prêts, cliquez simplement sur le bouton "Démarrer la sauvegarde".

Étape 2 - Créer un lecteur de récupération

Également depuis le panneau de configuration, option Historique des fichiers, choisissez cette fois la tâche Récupération en bas à gauche. On voit alors apparaitre trois choix différents mais c'est le premier qui nous intéresse, à savoir "Créer un lecteur de récupération".


Vous allez devoir vous munir d'une clé USB. Assurez-vous que celle-ci ait une taille suffisante (minimum 512 Mo). Il n'est plus possible d'utiliser des CD pour cette opération. Branchez votre clé, attendez que Windows la détecte, puis cliquez sur le bouton "Suivant".


Windows va détecter votre clé, et vous demander de sélectionner le lecteur. Choisissez celui qui correspond à votre clé puis cliquez sur "Suivant". Attention, toutes les données de la clé seront supprimées donc il est important de bien sauvegarder les données qui s'y trouvent avant qu'elle ne soit formatée. L'avertissement est assez clair. Cliquez sur "Créer" lorsque vous êtes prêts.


La vitesse de création dépendra du port USB et de la vitesse d'écriture de votre clé. Cela ne nécessite normalement pas plus de 5 minutes. Cette clé contient des utilitaires de restauration et vous permet notamment de lancer une invite de commandes ou de forcer un démarrage en mode sans échec. Dans notre cas elle nous servira à restaurer l'image sauvegardée sur le disque dur externe. C'est la prochaine étape de ce tutoriel.

Étape 3 - Restauration de l'image système

Il va falloir configurer votre PC pour permettre de démarrer sur une clé USB. Sur certains PC de fabricants comme Lenovo ou Asus, l'accès au BIOS est parfois difficile et configurer le périphérique de démarrage se révèle parfois fastidieux. Certains ordinateurs portables permettent de choisir cela via un menu au démarrage. C'est le cas de HP : il suffit d'appuyer sur la touche ESC puis F9 pour obtenir une liste des périphériques branchés. Si vous achetez vous-mêmes vos composants, vous ne devriez pas avoir trop de difficultés à accéder à la configuration du BIOS. Ce guide peut vous aider dans cette tâche parfois compliquée : guide d'auto-défense numérique - démarrer sur un CD, DVD ou une clé USB.
Profitez-en pour brancher votre disque dur externe, qui contient l'image (ou les) système, ou insérez le DVD adéquat si vous avez opté pour cette option. Notez qu'il sera également possible de chercher sur le réseau, ce qui peut être intéressant si vous avez un serveur (personnel ou non) qui regroupe toutes les sauvegardes de vos machines.
Si vous réussissez à démarrer sur la clé USB, vous devriez obtenir le logo de démarrage Windows puis un écran vous demandant de choisir la disposition du clavier. Utilisez le clavier ou la souris pour effectuer votre choix. Après avoir sélectionné la bonne langue, vous devriez voir apparaitre l'écran suivant : nous choisissons tout d'abord "Troubleshoot".


Ensuite, choisissez "Advanced options" puis "System Image Recovery". Cela aura pour effet d'ouvrir une nouvelle fenêtre. L'utilitaire va tenter de localiser l'image la plus récente sur le ou les périphérique(s) branché(s). (S'il ne trouve rien, il vous permettra d'aller à l'étape suivante et d'éventuellement rechercher sur le réseau ou à un emplacement en particulier). Si plusieurs images sont présentes sur le média, choisissez "Select a system image", sinon cliquez directement sur "Next".


Si vous avez choisi "Select a system image", toutes les sauvegardes seront listées sur l'écran suivant. Choisissez celle qui correspond puis cliquez sur "Next" jusqu'à tomber sur l'écran "Choose additional restore options".


Cochez bien la case "Format and repartition disks". Si vous avez laissé la clé USB ou un autre disque amovible branché à votre ordinateur, il faudra passer par l'option "Exclude disks" et cocher tout ce qui ne doit PAS être formaté. Le disque dur qui contient l'image est automatiquement exclu.  Cliquez sur "Next" pour passer à l'écran de confirmation. Choisissez "Finish" pour démarrer la restauration.

Et voilà, vous savez comment restaurer une image système !

vendredi 5 décembre 2014

[WD20] Découverte de la préversion

Windev 20 est désormais disponible en préversion. Il s’agit donc d’une version de tests qui n’est pas destinée à déployer des applications en production. Elle est distribuée dans le but de découvrir les nouvelles fonctionnalités présentées dans les brochures et lors du Tour de France Technique. C’est aussi un moyen pour les utilisateurs de déceler les bugs et de transmettre des informations utiles aux développeurs de PC SOFT. On retrouve sur le site web les 3 éditeurs en téléchargement, à savoir Windev, Webdev et Windev Mobile. L’installateur fourni permet d’installer soit la version 32 bits, soit 64 bits. Notez que le cours d’autoformation n’est pas encore disponible, ni les interfaces des langages externes.

Lorsqu’on lance Windev, la première chose que l’on constate c’est que l’interface n’a pas vraiment changé. On retrouve toujours le bandeau ainsi l’explorateur de projets sur la droite en mode avancé. On notera tout de même la refonte de l’assistant de création et ouverture de projet qui propose une ergonomie plus poussée. Il affiche uniquement les 4 options de base « Créer un projet », « Ouvrir un projet », « Ouvrir un exemple » et « Cours d’autoformation ». Le fait de cliquer sur un élément agrandit alors la fenêtre – avec une jolie petite animation – en proposant davantage d’options comme on peut le voir sur l’image ci-dessous.


Pour mieux percevoir les changements, il est intéressant de mettre côte-à-côte l’assistant des deux dernières versions de l’AGL. On peut voir ici une volonté de moderniser le tout. Ce look bien plus sobre s'est bien éloigné du design très coloré de la version 12 et de ses plages ensoleillées. L'excentricité fait de plus en plus place à quelque chose de plus soigné et de plus sérieux. On ne peut que féliciter ce choix.
  

Créons maintenant un nouveau projet pour découvrir les nouveautés de l’éditeur de fenêtres tout d’abord. L’assistant ne change pas. Cependant on peut voir l’arrivée de 2 nouveaux gabarits : Activ Fox, qui propose un mélange de couleurs orange, gris et bleu, ainsi que Activ Android 5, qui lui propose un ensemble de nuances turquoise.
  
L’éditeur de fenêtres
      
L’une des premières nouveautés, c’est le déplacement et le redimensionnement des groupes de champs. Dans l’exemple qui suit, nous avons créé deux boutons qui sont positionnés l’un au dessus de l’autre. Si vous les sélectionnez et que vous maintenez la touche CTRL tout en redimensionnant l’un des deux champs, vous constaterez que l’agrandissement est automatiquement effectué sur chacun d’entre eux. Le comportement est différent quand on sélectionne deux champs de type différent : lorsque le premier est redimensionné, le second est poussé dans la direction choisie.
     

Autre changement : l’onglet « Alignement » du bandeau propose de nouvelles options pour positionner vos champs ou vos groupes de champs. Par exemple, il est possible de positionner un champ le plus en haut possible puis le plus à gauche, tout en tenant compte des éléments déjà présents dans la fenêtre. Idem pour étendre un champ en largeur ou en hauteur : une chose est certaine, cela va rendre l’alignement des champs bien plus intuitif. 


Une autre nouveauté majeure concerne la navigation entre les champs avec la touche « TAB » (tabulation).  Si vous avez la flemme de définir l’ordre des champs dans votre fenêtre, surtout si celle-ci en possède un tas, vous pouvez demander à ce que l’ordre soit calculé automatiquement en fonction de la position des champs. Il s’agit d’une case à cocher dans l’option « Navigation » de l’onglet « Fenêtre ». Cependant on s’en doute l’ordre ne sera pas toujours celui qu’on souhaite, dans ce cas il faudra repasser en mode manuel.
   
  
On peut constater quelques petits bugs dans les nouveaux gabarits. Par exemple, lorsque vous activez les fonctionnalités d’onglets MDI dynamiques, un bouton « + » apparait à droite des onglets (si vous permettez l’ajout). L’image de ce bouton est répétée à l’infini tant que ce bouton n’est pas collé au bord droit du champ. Ce cas a été constaté sur le gabarit Activ Android 5. Ce n’est pas tellement gênant en soi mais autant le signaler tout de suite.
    
Les améliorations de l’interface
    
On pourra constater un petit changement graphique dans l’éditeur de code. Rien de bien exceptionnel, cela dit. Mais ce dont il faut parler c’est des éléments détachables de l’éditeur. Lorsqu’une fenêtre, une requête ou un bout de code est ouvert, il est désormais possible de l’afficher sous forme de fenêtre, à l’image des onglets détachables. Pour cela maintenez le clic gauche enfoncé et déplacez l’élément souhaité, comme sur l’image ci-dessous. Relâchez le clic et une fenêtre apparaitra. Vous pouvez dès lors l’ancrer comme toutes les autres fenêtres, la déplacer sur l’un de vos autres écrans ou bien tout simplement la réintégrer en la déplaçant dans la zone principale de l’éditeur. Petit souci rencontré : lorsque tous les éléments détachés sont replacés au sein de la fenêtre principale de Windev, il arrive que ce dernier soit minimisé.
      
 
A première vue pas d’amélioration au niveau de l’éditeur du système d’aide. Pire encore, certains bugs ne semblent pas avoir été résolus. Par exemple, les styles de la liste déroulante apparaissent toujours en double ou en triple, la plupart du temps. Le choix du style entraine encore des drôles de comportement : « texte normal » fait apparaitre le texte en 18. Autre problème : il est parfois impossible de renommer une page d’aide ou un livret directement depuis l’arborescence. On ne sait pour quelle raison la touche F2 ou « Renommer » n’active parfois pas la saisie comme il le faudrait. Il faut alors passer par les propriétés… Espérons que tout ça soit résolu dans la release finale.
     

Finalement l’interface globale a reçu peu d’améliorations réellement visibles. Il reste par ailleurs ou trois petits bugs qui étaient déjà présents dans la version 19. Cette nouvelle édition de Windev apporte surtout son lot de nouveaux champs et de nouvelles fonctions, mais également le support des nouvelles technologies (telles que Windows 10, iOS 8, Android 5, et les standards Web récents). Il y a bien sûr des choses sur lesquelles nous reviendrons, comme le debugger, le champ Carte, le MVC, les fonctions SSH, et bien plus encore.

mercredi 3 décembre 2014

[WD19] Utiliser l'API Exchange Web Services (III)

Avec EWS Managed API 2.0, il est possible de réaliser des choses vraiment intéressantes. Il serait clairement plus simple de travailler directement en .NET mais nous allons voir ensemble ce qu'il est possible de faire dans Windev. Dans ce nouvel exemple nous allons récupérer la liste de dossiers à partir d'un dossier source.

Récupérer une liste de dossiers

N'oubliez pas qu'avant de récupérer une liste de dossiers vous devez au préalable récupérer l'URL du service Web. Nous avons vu ensemble comment réaliser cette opération dans les précédents articles. Si vous ne savez plus comment faire, suivez le lien : voir partie 1.


La première étape consiste à initialiser la vue et un filtre de recherche. Il faut tout d'abord déclarer les différentes variables, des types suivants : FindItemResults, FolderView, et SearchFilter. Ces deux dernières doivent être initialisées à la valeur Null. On peut aussi déclarer des entiers qui serviront de compteurs.

Ensuite, voici ce que nous avons réalisé : 
  • Création d'un filtre avec l'initialisation de la variable "scFilt" (qui est notre filtre de recherche). On l'instancie avec new SearchFilter.IsGreaterThan(). Les paramètres sont, dans l'ordre, la constante FolderSchema.TotalCount et 0. Cela permettra d'obtenir les dossiers qui contiennent un ou plusieurs objets.
  • Initialisation de la vue : new FolderView(TAILLE, OFFSET). Comme pour récupérer des e-mails, nous spécifions une taille (dite "de page") et éventuellement un offset si la recherche retourne de multiples éléments.
  • Dans la vue, on doit définir l'ensemble des propriétés à récupérer. Il faut donc alimenter le contenu de la propriété View.PropertySet. Remarquez que cela est réalisé en deux étapes car les constructeurs requièrent des collections d'objet, chose qui n'est pas forcément pratique à mettre en place.
    • new PropertySet(BasePropertySet.IdOnly).
    • vi.PropertySet.Add(xxxx) : ajouter d'autres propriétés qu'on souhaite récupérer et lire (comme FolderSchema.DisplayName pour le nom ou FolderSchema.FolderClass pour la classe du dossier - ex : "IPF.Note" pour les mails).
  • Méthode de recherche : avec les dossiers il est possible d'aller plus loin et donc de rechercher les sous-dossiers de manière récursive. La propriété Traversal de notre vue peut être initialisée avec la constante FolderTraversal.Deep. Dans notre code d'exemple cela donne tout simplement la syntaxe suivante : vi.Traversal = FolderTraversal.Deep.
    
Notre filtre et notre vue sont désormais prêts, on peut passer à l'étape suivante.


Dans une boucle où l'on teste qu'il reste des éléments, nous récupérons à chaque fois jusqu'à 10 objets, en modifiant à chaque fois l'offset dans la vue. Le principe est le même que pour récupérer les e-mails. Dans cette étape on a donc réalisé les opérations suivantes : 
  • Tester la variable bMoreItems. Si elle vaut "true" on continue à traiter les éléments.
  • Initialiser notre variable de type FindItemResults cette fois avec la méthode ExchangeService.FindFolders(). 3 paramètres doivent être donnés à la fonction : le dossier à partir duquel on souhaite effectuer la recherche (ex : WellKnownFolderName.Root), le filtre (dans notre exemple il s'agit de la variable "scFilt") et enfin la vue (variable "vi").
  • Est-ce qu'il y a encore des objets ? bMoreItems = clDrFindResults.MoreAvailable.
  • Déplacer l'offset si bMoreItems vaut Vrai : vi.Offset = vi.Offset + iPageSize.
  • Initialiser une variable de type entier à 0 en guise de compteur.
  • Initialiser le nombre d'objets affichables, c'est-à-dire le nombre d'objets que la collection a retourné. Dans notre exemple le code est le suivant : iDspCnt = clDrFindResults.Folders.Count.
  • Dans une boucle POUR TOUT on traite chaque objet de la collection clDrFindResults.Folders. Ici nous décidons de sauvegarder le nom et l'ID de chaque dossier dans un objet de classe. On sort de cette boucle lorsque notre compteur a atteint le nombre d'objets affichables (voir ci-dessus). A vous de trouver le traitement adéquat à réaliser...
   
Voilà, vous pouvez désormais récupérer une liste de dossiers avec l'API et ce en utilisant Windev. N'est-ce pas magnifique ?

lundi 1 décembre 2014

[WD19] Utiliser l'API Exchange Web Services (II)

Il y a quelques mois nous avions vu comment utiliser l'API Exchange Web Services 2.0 depuis Windev. Grâce aux bibliothèques .NET fournies il est possible d'interroger un serveur Exchange et de récupérer les e-mails d'un utilisateur. Nous avons fait l'expérience en créant une petite fonction qui récupère 10 objets à la fois dans la boite de réception de l'utilisateur, et ce en travaillant avec la notion d'offset, ce qui permet à terme d'effectuer des opérations de pagination (ex : l'utilisateur appuie sur un bouton pour afficher la deuxième page).

Télécharger les bibliothèques et les importer

L'API est fournie par Microsoft et peut être téléchargée sur le site officiel à l'adresse suivante : http://www.microsoft.com/en-us/.../details.aspx?id=35371. Sélectionnez la version qui convient (32 ou 64 bits) puis installez-là sur votre poste de développement. Les DLL sont alors disponibles dans le répertoire %ProgramFiles%\Microsoft\Exchange\Web Services\2.0. Importez-les dans votre projet Windev.

Recherche avec pagination

Dans l'exemple qui suit, nous allons effectuer une récupération de 10 éléments en modifiant à chaque fois l'offset. Nous nous basons sur le tutoriel proposé sur MSDN qui explique comment fonctionne cette méthode. Nous avons alors repris la procédure d'exemple en fin de page mais nous avons fait une croix sur l' "ancre" qui permet de déterminer si un élément a changé de place ou non.


Il est évidemment important d'allouer un objet Credentials pour permettre la connexion à chaque requête. Le Web Service EWS étant stateless, la connexion n'est pas constante et chaque requête est traitée indépendamment des autres. Avant toute chose, il faut donc instancier un objet global de type ExchangeService, qu'on pourra réutiliser dans chaque fenêtre. Dans le code qui suit, l'objet fait plutôt partie d'une classe qu'on pourra déclarer dans la section "initialisation du projet".


Voici ce qui a été réalisé :
  • Instanciation de la classe ExchangeService. Le constructeur reçoit en paramètre le numéro de version Exchange qui doit correspondre à celui utilisé sur le serveur, sinon les requêtes ne seront pas toujours bien gérées (MSDN#FF597939).
  • On se connecte en utilisant le nom d'utilisateur, le mot de passe et le domaine (en allouant une nouvelle instance d'un objet de type WebCredentials).
  • La fonction "AutodiscoverUrl()" permet de localiser le fichier Exchange.asmx sur le serveur pour pouvoir envoyer les futures requêtes. On obtient alors l'URL du "point d'entrée" (endpoint) du web service.
             
Si la connexion a abouti il faut ensuite réaliser ces opérations :


Dans l'ordre, voici ce qui a été fait :
  • On crée un nouvel objet de type ItemView permettant de stocker un nombre d'objet défini par la variable "iPageSize". L'offset - stocké dans la variable "iOffset" - indique l'endroit à partir duquel on souhaite récupérer les informations (de base 0 pour commencer au début). Il devra être progressivement modifié pour récupérer les éléments suivants.
  • On initialise l'ensemble des propriétés à récupérer. Dans ce cas-ci, on récupère simplement l'ID mais on peut imaginer récupérer la date/heure de réception ou le sujet. A partir de cet instant on peut utiliser la syntaxe suivante : maVue.PropertySet.Add(xxxxx). A noter que la fonction FindItems() ne récupère pas les adresses des destinataires ou de l'expéditeur.
  • On ajoute une condition de tri : maVue.OrderBy.Add(champ, ordre du tri). Ici, on souhaite trier sur la date/heure de réception (ItemSchema.DateTimeReceived) de manière descendante (la plus récente d'abord soit SortDirection.Descending).
  • On indique la méthode de recherche.
          
Pourquoi ne pas avoir indiqué d'autres propriétés dans le constructeur de la classe PropertySet ? Si on souhaite en rajouter d'autres, on peut se servir de la méthode Add() car le second constructeur de la classe PropertySet demande une collection d'objets. En .NET, lorsqu'on indique plusieurs objets à la suite, il considère cela comme un tableau d'objets ou une collection IEnumerable, et reconnait quel constructeur doit être appelé. Mais à ce stade Windev n'est pas capable d'effectuer la conversion de types.

On entre alors dans le vif du sujet : la récupération des e-mails.


Voici ce qu'on a réalisé dans cette étape (le tout étant englobé dans une boucle) :
  • On a englobé le code dans une boucle qui teste "bMoreItems".  Tant que cette variable est à "true", on continue le traitement. Lorsqu'elle vaut "false", on sort de la boucle.
  • A chaque tour de boucle on initialise l'objet de type 'FindItemsResults' (à déclarer comme tel en début de fonction) en appelant simplement la fonction FindItems() qui reçoit en paramètre le dossier (ex : WellKnownFolderName.Inbox) ainsi que la vue qui a été précédemment paramétrée. Seul l'offset changera au cours de l'opération.
  • S'il y a d'autres résultats alors on va augmenter l'offset pour le prochain tour de boucle en rajoutant à celui-ci la taille d'une page (ici, on ajoute donc 10). Si on avait utilisé le système d'ancre, il aurait fallu récupérer à chaque fois un objet de plus pour permettre de déterminer s'il y avait eu un changement entre deux sets de résultats.
  • Ensuite on charge l'ensemble des propriétés de "première classe", il s'agit notamment des champs sujet, date/heure réception, expéditeur, destinataire(s), etc. Dans ce cas s'il y a 10 objets récupérés on charge en mémoire les propriétés de ceux-ci.
              
Pour parcourir la collection il faut utiliser une boucle de type POUR TOUT. On arrête cette boucle lorsqu'on a atteint le nombre d'objets retourné. Pour en sortir, il faudra le faire de force avec le mot-clé adéquat. On y traite les e-mails un par un et là, c'est à vous de décider ce que vous faites. Dans l'exemple ci-dessous, on enregistre simplement dans des membres d'une classe. On peut imaginer d'ajouter chaque élément dans un champ Table.


Ce qu'il faut faire :
  • Initialiser la variable de comptage à 0.
  • Initialiser le nombre maximum d'objets à afficher.
  • Traiter chacun des objets de la collection monResultset.Items.
  • Incrémenter la variable d'itération.
  • Sortir lorsqu'elle est égale à la variable qui contient le nombre de résultats à afficher.
            
Contraintes rencontrées

Lorsqu'on utilise une API .NET, on peut faire face à certains soucis...
  • Windev ne prend pas en charge les tableaux d'objets en .NET. Dans notre cas on ne peut pas écrire "clDrFindResults.Items[x]". 
  • Certaines fonctions comme FindItems.Items.First() ou Last() tentent d'effectuer des copies d'objet. Cela n'est pas géré par Windev et donc les fonctions ne peuvent pas être utilisées telles quelles.
  • La conversion d'objets pose problème dans le cas des constructeurs, comme c'est le cas lorsqu'on effectue une allocation d'un objet de la classe PropertySet. Dans ce cas il faut trouver une alternative...
  • Certains objets doivent être convertis en chaine pour l'affichage avec les méthodes ToString(). En général, cela se fait automatiquement en .NET, sauf dans certains cas bien précis.
            
Bon développement à tous !