1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies. En savoir plus.
  2. Bonjour tout le monde ! Veillez consulter la Politique de forum pour comprendre nos règles, Merci a vous !
    Rejeter la notice

WD Héritage d'une classe abstraite .NET

Discussion dans 'Windev' créé par redha2010, Août 14, 2018.

Tags:
  1. redha2010

    redha2010 Active Member

    Inscrit:
    Jan 25, 2018
    Messages:
    230
    J'aime reçus:
    226
    j'essai d'utiliser sur windev 22 un moteur de jeux 3D avec un wrapper .NET de famous moteur Irrlicht
    nomé IrrlichtFramework ,j'utilisais sur .NET facilement
    sur dontnet j'herite la classe Game sans probleme

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    mais sur windev :( sa pose un problème

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    et quand j'essai de faire une instance de cette classe Game le compilateur m'affiche que cette classe est abstraite et cela est interdit

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    comment le faire ?
     
    Tags:
  2. Ezekiel056

    Ezekiel056 Active Member

    Inscrit:
    Jan 17, 2018
    Messages:
    200
    J'aime reçus:
    154
    Bonjour,j

    Effectivement, ton exemple d'ailleurs sur Visual studio le montre bien :
    Class1 hérite de Framework.Game

    A aucun moment tu ne l'instancie, et si tu fais en c#:
    Code (Text):
    Framework.Game MoGame  = New Framework.Game();
    A mon avis le compilateur va gueuler aussi.

    Il faut que tu crée une classe qui Herite de Framework.Game
    et que instancie cette classe et non la classe dérivée.

    Ex :
    Code (Windev):

    gclMysTest est un BB
     
     
    joker apprécie ceci.
  3. Johjo

    Johjo New Member

    Inscrit:
    Jan 2, 2018
    Messages:
    14
    J'aime reçus:
    17

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    j'essai d'utiliser sur windev 22 un moteur de jeux 3D avec un wrapper .NET de famous moteur Irrlicht
    nomé IrrlichtFramework ,j'utilisais sur .NET facilement
    sur dontnet j'herite la classe Game sans probleme

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    mais sur windev :( sa pose un problème

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    et quand j'essai de faire une instance de cette classe Game le compilateur m'affiche que cette classe est abstraite et cela est interdit

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    comment le faire ?
    Cliquez pour agrandir...
    Je n'ai jamais utilisé .NET dans windev, mais si tu souhaites utiliser une classe abstraite, tu dois passer par une variable dynamique :

    Code (Windev):
    gclMytest est Framework.Game dynamique = ... // Tu dois allouer une classe non abstraite
    En effet, si tu n'utilises pas le mot clé dynamique, l'instance est initialisée comme un Framework.Game et appelle le constructeur.

    J'aimerai aussi connaître le message d'erreur signalé dans la déclaration de ta classe. Cela pourrait aider.

    Bonne journée à toi.

    Jonathan.
     
    joker apprécie ceci.
  • Ezekiel056

    Ezekiel056 Active Member

    Inscrit:
    Jan 17, 2018
    Messages:
    200
    J'aime reçus:
    154
    Concernant cette erreur sur le compilateur :
    [​IMG]

    Il y a peut être un conflit avec un autre type qui s'appelerait Game.
    Essaye avec :

    Code (Windev):

        hérite de Framework."Game"
     
     
    Johjo et joker aiment ça.
  • redha2010

    redha2010 Active Member

    Inscrit:
    Jan 25, 2018
    Messages:
    230
    J'aime reçus:
    226

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Il faut que tu crée une classe qui Herite de Framework.Game
    et que instancie cette classe et non la classe dérivée.
    Cliquez pour agrandir...
    effectivement j'utilise une autre classe BB mais j'arrive pas a herite la classe Game
    sur la photo presenté c'est le code du classe BB


    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    J'aimerai aussi connaître le message d'erreur signalé dans la déclaration de ta classe. Cela pourrait aider
    Cliquez pour agrandir...
    Code (Windev):

    BB
       

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    :

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    de syntaxe sur le mot ..
     
    meme si j'utilise dans l'heritage du classe dynamique c'est la meme erreur
    Code (Windev):
    BB est une Classe
      hérite de Framework.Game dynamique
    FIN
     
  • Ezekiel056

    Ezekiel056 Active Member

    Inscrit:
    Jan 17, 2018
    Messages:
    200
    J'aime reçus:
    154

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    As tu vu l'autre solution que j'ai posté plus haut ?

    [​IMG]
     
    redha2010 et Johjo aiment ça.
  • redha2010

    redha2010 Active Member

    Inscrit:
    Jan 25, 2018
    Messages:
    230
    J'aime reçus:
    226

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    As tu vu l'autre solution que j'ai posté plus haut ?

    [​IMG]
    Cliquez pour agrandir...
    biensure je prends toujours tous vos remarques :)
    mais c'est la meme erreur

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    :

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    de syntaxe sur le mot ..
    Cliquez pour agrandir...
     
  • Johjo

    Johjo New Member

    Inscrit:
    Jan 2, 2018
    Messages:
    14
    J'aime reçus:
    17

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    As tu vu l'autre solution que j'ai posté plus haut ?

    [​IMG]
    Cliquez pour agrandir...
    Attention, le mot clé dynamique ne doit pas être utilisé au même niveau que la ligne d'héritage (présence du mot clé hérite). Ce mot clé ne peut être utilisé qu'au niveau de la définition d'une variable. Il indique c'est une variable qui peut contenir un objet du type X ou des sous-type de X. Il faut ensuite allouer l'instance via le mot clé Allouer.

    Dans ta ligne où tu définis l'héritage, essaye tout simplement (et en espérant que Game ne soit pas déjà défini quelque part) :
    [windev]hérite de Game[/windev]
    Bon courage
     
    redha2010 apprécie ceci.
  • redha2010

    redha2010 Active Member

    Inscrit:
    Jan 25, 2018
    Messages:
    230
    J'aime reçus:
    226

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Attention, le mot clé dynamique ne doit pas être utilisé au même niveau que la ligne d'héritage (présence du mot clé hérite). Ce mot clé ne peut être utilisé qu'au niveau de la définition d'une variable. Il indique c'est une variable qui peut contenir un objet du type X ou des sous-type de X. Il faut ensuite allouer l'instance via le mot clé Allouer.

    Dans ta ligne où tu définis l'héritage, essaye tout simplement (et en espérant que Game ne soit pas déjà défini quelque part) :
    [windev]hérite de Game[/windev]
    Bon courage
    Cliquez pour agrandir...
    Code (Text):
    Erreur :Le type 'Game' est inconnu.
     
  • Ezekiel056

    Ezekiel056 Active Member

    Inscrit:
    Jan 17, 2018
    Messages:
    200
    J'aime reçus:
    154
    Tu as un lien pour DL ton framework qq part ?

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

     
  • redha2010

    redha2010 Active Member

    Inscrit:
    Jan 25, 2018
    Messages:
    230
    J'aime reçus:
    226
    ce sont 4 dll 3 du moteur construit sur C++ est le wrapper en NET que j'utilise comme reference
    voila les fichiers
     

    Fichiers attachés:

    • DLLs.rar
      Taille de fichier:
      844.3 KB
      Affichages:
      28
    joker apprécie ceci.
  • Ezekiel056

    Ezekiel056 Active Member

    Inscrit:
    Jan 17, 2018
    Messages:
    200
    J'aime reçus:
    154
    Hum.. apparemment ce n'est pas la première fois que quelqu'un se pose la question.

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    Et en fait je n'ai pas le souvenir d'avoir déjà créé une classe windev qui HERITE d'une classe d'un objet .net.
    Est-ce tout simplement possible en fait ?

    Edit :
    Ça date de quelques temps déjà mais a l’époque apparemment ce n’était pas possible :

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

     
    joker apprécie ceci.
  • redha2010

    redha2010 Active Member

    Inscrit:
    Jan 25, 2018
    Messages:
    230
    J'aime reçus:
    226
    Donc il faut que j'ecrit un autre DLL en .NET qui utilise la classe Game !
    je l'ai fait , mais c'est pas utile d'ecrire tout le code en .net

    il ya un autre wrapper .net du moteur Irrlicht

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!


    peut etre on peut l'utiliser ?
     
  • Ezekiel056

    Ezekiel056 Active Member

    Inscrit:
    Jan 17, 2018
    Messages:
    200
    J'aime reçus:
    154
    Je ne connais pas mais peut être effectivement.
    Il faudrait, pour être sur, poser la question au support PC SOFT concernant l’héritage d'interface / classe abstraite .NET
     
  • redha2010

    redha2010 Active Member

    Inscrit:
    Jan 25, 2018
    Messages:
    230
    J'aime reçus:
    226
    enfin j'ai pu utiliser Irrlicht avec windev pour un test :) mais avec

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    Code (Windev):
    gpclDevice est  IrrlichtDevice dynamic
    gpclDevice = IrrlichtDevice.CreateDevice(DriverType.Software, new Dimension2Di(640, 480), 16, False, False, False)
    gpclDevice.SetWindowCaption("Hello World! - Irrlicht Engine Demo")
    gpclDriver est  VideoDriver  dynamic= gpclDevice.VideoDriver
    tt est IrrlichtLime.Video.Color(100,100,140)

    WHILE gpclDevice.Run()
        gpclDriver.BeginScene(ClearBufferFlag.All,tt)
        gpclDriver.EndScene()
    END
    mais le problème d’héritage reste posé
     
    suenodesign et Ezekiel056 aiment ça.
  • Ezekiel056

    Ezekiel056 Active Member

    Inscrit:
    Jan 17, 2018
    Messages:
    200
    J'aime reçus:
    154
    Good ;)

    En espérant que le problème ne se représente pas ailleurs avec IrrLicht Lime .. :(
     
  • redha2010

    redha2010 Active Member

    Inscrit:
    Jan 25, 2018
    Messages:
    230
    J'aime reçus:
    226

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Good ;)

    En espérant que le problème ne se représente pas ailleurs avec IrrLicht Lime .. :(
    Cliquez pour agrandir...
    je crois pas
    j'ai tester avec l'exemple hello world du moteur ecris en c# et je l'ai recrir en windev

    Code (Windev):
    gpclDevice est  IrrlichtDevice dynamic
    FPMedia est une chaîne="C:\IrrlichtLime-1.5\media\"
    gpclDevice = IrrlichtDevice.CreateDevice(DriverType.Software, new Dimension2Di(640, 480), 16, False, False, False)

    gpclDevice.SetWindowCaption("Hello World! - Irrlicht Engine Demo avec windev ")
    gpclDriver est  VideoDriver  dynamic= gpclDevice.VideoDriver
    tt est IrrlichtLime.Video.Color(100,100,140)
    gpclSmgr est SceneManager dynamic= gpclDevice.SceneManager
    gpclUi est GUIEnvironment dynamic= gpclDevice.GUIEnvironment

    gpclUi.AddStaticText("Hello World! This is the Irrlicht Software renderer!",new Recti(10, 10, 260, 22), True)

    gpclMesh est AnimatedMesh  dynamic= gpclSmgr.GetMesh(FPMedia+"sydney.md2")
    gpclNode est AnimatedMeshSceneNode dynamic= gpclSmgr.AddAnimatedMeshSceneNode(gpclMesh)
    SI gpclNode NOT =Null ALORS  
        gpclNode.SetMaterialFlag(MaterialFlag.Lighting, False)
        gpclNode.SetMD2Animation(AnimationTypeMD2.Stand)
        gpclNode.SetMaterialTexture(0, gpclDriver.GetTexture(FPMedia+"sydney.bmp"))
    FIN
        gpclSmgr.AddCameraSceneNode(Null, new Vector3Df(0, 30, -40), new Vector3Df(0, 5, 0))
       
    WHILE (gpclDevice.Run())
        gpclDriver.BeginScene(ClearBufferFlag.All, tt)
        gpclSmgr.DrawAll()
        gpclUi.DrawAll()
        gpclDriver.EndScene()
    END
     
    résultat :

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

     
    suenodesign apprécie ceci.
  • channibal

    channibal Well-Known Member
    MEMBRE WX

    Inscrit:
    Fev 22, 2018
    Messages:
    210
    J'aime reçus:
    277
    Bonjour,

    La classe abstraite est une classe dont les méthodes et les propriétés ne sont pas implémentés, ils sont abstraits comme la classe.

    Alors à quoi sert donc une classe abstraite ?

    La classe abstraite sert à définir les comportements / contrats que doivent accomplir les classes dérivées

    La classe abstraite ne peut pas être instanciée. Son rôle est uniquement descriptif.

    C’est pour cela qu’on définit le prototype de la classe abstraite et ça oblige à implémenter ses méthodes dans les classes dérivées.

    Mais, hélas, une limitation de windev.. je cite:

    "Une classe WLangage ne peut pas dériver d'une classe .NET."

    Ce qui implique que la classe Game ne peut pas implémenter ses méthodes.

    Si on fait :

    Code (Text):
    BB est Game
    Pas d’erreur mais aussi pas d’implémentation !

    [​IMG]

    Le DotNet dans windev a beaucoup évolué depuis le temps mais visiblement pas encore assez pour on en être satisfait.

    Dommage :(

    Bon Dev.
     
    Ezekiel056, suenodesign et joker aiment ça.
  • Johjo

    Johjo New Member

    Inscrit:
    Jan 2, 2018
    Messages:
    14
    J'aime reçus:
    17

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!


    D'après la réponse de

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    , il faudrait faire l'implémentation (classe GameImpl par exemple) de la classe en c#, ou au moins, créer les méthodes vides pour que la classe puisse être allouée. Tu pourras ainsi l'utiliser directement dans windev.

    Et si tu souhaites faire une dérivation de cette classe, tu peux utiliser le pattern proxy, c'est à dire encapsuler la classe c# dans une classe windev et c'est cette dernière que tu dériverais. Bien entendu, avec cette méthode, tu n'aurais pas accès aux méthodes protégées.
     
  • Ezekiel056

    Ezekiel056 Active Member

    Inscrit:
    Jan 17, 2018
    Messages:
    200
    J'aime reçus:
    154

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Bonjour,
    Mais, hélas, une limitation de windev.. je cite:
    "Une classe WLangage ne peut pas dériver d'une classe .NET."
    Cliquez pour agrandir...
    Ou as tu trouvé l'information du coup, j'ai beau avoir cherché, je n'ai rien trouvé d'officiel.
     
  • Partager cette page

    Chargement...