IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API, COM et SDKs Delphi Discussion :

[Interfaces] Comment définir l'emplacement mémoire des methodes ?


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut [Interfaces] Comment définir l'emplacement mémoire des methodes ?
    J'ai une question un peu technique sur les interfaces.

    J'ai remarqué que Delphi se base sur l'ordre de declaration pour retrouver l'adresse memoire des methodes qu'elle declare.

    Autrement dit, la premiere methode = @interface, la 2e = @interface+0x00000001, etc ...

    Si on saute la declaration d'une methode, les adresses sont decalées et la methode appelée pointe sur la zonne memoire de la decalration de la supposée methdoe precedente (qu'on a omis) ce qui entraine une erreur.

    Je me demandais donc si il n'etait pas possible de definir a cote de la declaration de la methode d'une interface une adresse memoire ou est definie la methode ...

    LE principe serait de pouvoir declarer ue interface incomplete dans la partie "cliente" de l'application, celle qui ne fait que manipuler un objet par son interface, transmise par la partie "server" (souvent la dll).
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  2. #2
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    C'est impossible car contraire à l'esprit des interfaces : une interface, une fois qu'elle a reçu son GUID, ne doit normalement plus changer ! Si on veut en faire une nouvelle version, il faut en hériter. Et si tu veux une restriction, ben soit il fallait ajouter un ancêtre à ton interface, soit utiliser l'interface complète.
    D'ailleurs je ne vois pas de trop où se situe le problème (même les interfaces ne DirectX ne font 100 lignes...)
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  3. #3
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Bhoa mon probleme est tout bete :
    J'ai une Dll qui exorte des objets COM.
    Pour l'utiliser j'importe la Librairie de type dans le Fichier XXX_TLB.Pas

    J'ai su par d'autres sources que l'outils Borland est catastrophique a ce sujet, et code des fonctions en melangeant les parametres, les types, ou ioublie certains ligens de code dans la gestion des Events.

    Donc je voulais effectivement me refrapper a la main toutes les interfaces et le fichier TLB.

    Comme le temps est compté et que je n'utilise que 5% des fonctions des interfaces pour le moment, je voulais m'occuper que des fonctions que j'utilise.

    Je peux effectivement copier/Coller l'integralité des interfaces et et retoucher uniquement celles que j'utilise mais cela pose 2 pbs : Je suis egalement obligé de redefinir tous les types utilisées par les autres fonctions et lors de l'utilisation aucune differences ne sera faite entre celles qui sont "sure" et les autres ...

    Donc je voulais definir dans mon exe des interfaces qui ne declare que les methodes utilisées.
    Lors de test j'ai remarqué que l'on pouvais en supprimer la moitie des declaratiosn sans pbs . .a conditions qu'aucune des fonctions declarées au desses de toutes celeles utilisées ne le soient.

    Une directive qui indique a delphi de nous faire confiance et de moduler l'adresse qu'il utilise par un offset defini par nous meme aurait ete pratique a mon avis.

    Une interface est un contrat entre l'objet qui implemente l'interface et l'objet quie la manipule. Mais ce "contrat" de doit etre respecte que dans le cadre de l'implemntation ...
    Si tu dis que ton objet implemente un interface on est en droit d'attendre que cette objet reponde positivement a chaques methdoes de l'interfaces car chacune d'entres elles peuvent etre utilisée un jour au l'autre.
    Dans le cadre de l'utilisation, tu connait les methdoes que l'objet est suceptible de manipuler mais je ne vois pas en quoi iul est important que cette definition se doit d'etre complete ....

    DE la meme maniere, tu n'as le faire un cast descendant que si tu est sur que l'objet derive de l'interface de cast car tu est en mesure apres le cast de faire appel a chacune des fonctions de l'objets. Si une d'elle manque ca plante.

    Par contre les cast ascendant ne sont pas genant car apres tout on est pas obligé de connaitre toutes les fonctiosn proposées par un objet pour pouvoir le manipuler correctement ....
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

Discussions similaires

  1. [ALIAS TABLE] - Comment définir un alias sur des tables
    Par spezet29 dans le forum Administration
    Réponses: 7
    Dernier message: 10/08/2010, 14h16
  2. comment définir l'emplacement de struts.xml
    Par demanghonj dans le forum Struts 2
    Réponses: 1
    Dernier message: 26/07/2009, 09h53
  3. Réponses: 5
    Dernier message: 14/02/2007, 15h29
  4. Comment définir des raccourcis clavier ?
    Par st0nky dans le forum Composants VCL
    Réponses: 3
    Dernier message: 07/12/2005, 20h37
  5. Comment dééfinir les valeurs des abscisses en Time ?
    Par marsupilami34 dans le forum Langage
    Réponses: 1
    Dernier message: 29/09/2005, 15h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo