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 :

Renvoyer un type structuré dans objet OLE


Sujet :

API, COM et SDKs Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 54
    Points : 36
    Points
    36
    Par défaut Renvoyer un type structuré dans objet OLE
    bonjour,

    Je dois faire un objet OLE qui présentera certaines méthodes appelées par un programme dont je n'ai pas les sources. Plusieurs de ces méthodes doivent renvoyer des enregistrements trouvés dans une BDD. Il faut donc renvoyer un type structuré.
    J'ai donc fait un record qui contient les valeurs à renvoyer. Le problème, c'est que Delphi (5 entreprise) me dit qu'une fonction publiée d'un objet OLE ne peut renvoyer de record. J'ai essayé avec un variant, mais variant et record ne sont pas compatibles. Comment puis-je faire ?

  2. #2
    Membre expérimenté
    Avatar de Harry
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2002
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 224
    Points : 1 331
    Points
    1 331
    Par défaut
    essaye d'utiliser varastype lors de l'affectation.
    Ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ServiceOLE.Meschamps := VarAsType(mavariablecomplexe, VarDispatch)

    Attention le .NET sur PDA peut causer des chutes de cheveux

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 54
    Points : 36
    Points
    36
    Par défaut
    Je n'ai pas encore essayé ton truc. Pour le moment le prototype de ma fonction renvoie un variant, et je passe un record de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function mafunc : variant;
    var
      monrec : TEnreg;
    begin
      ...
      TVarData(result).vType := varUnknown;
      TVarData(result).vUnknown := @monrec;
    end;
    L'appli appelante me sort un message d'erreur, mais je ne sais pas si c'est parce que cette méthode ne lui convient pas, ou si c'est parce que l'objet renvoyé ne lui convient pas (propriété manquante ou autre)...

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 54
    Points : 36
    Points
    36
    Par défaut
    Je ne vois pas comment je peux implémenter ta méthode. Ce n'est pas une propriété de l'objet OLE que je veux affecter, c'est un objet que doit renvoyer une méthode de l'objet OLE.
    Je pourrais contourner en mettant cet objet comme membre de l'OLE, mais je ne peux pas car je n'ai pas accès à l'appli appelante, qui réclame que la fonction renvoie cet objet directement.

    Cette appli appelante est écrite en visual fox pro, ou apparemment rien n'est typé, ce qui est bien pratique mais pas quand on doit l'interfacer avec un langage fortement typé...

  5. #5
    Rédacteur

    Inscrit en
    Mars 2005
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 38
    Points : 450
    Points
    450
    Par défaut
    Bonjour,

    La fonction ("mafunc") est fausse et même dangereuse ! Elle est non compatible avec le mécanisme (marshalling) OLE de transfert des données.

    Avec OLE, pour transférer le record d'un enregistrement il n'est pas necessaire/obligatoire de passer par un type "record". Par exemple le type enregistrement d'une table ADO n'utilise pas cette technique. Généralement c'est une collection énumérable qui est transmise...

    Pour résoudre ton problème (si j'ai bien compris l'interfacage) tu peux regarder les résolutions classiques actuelles. Par exemple tu peux utiliser un type défini par ADO. Pour cela il faut inclure un lien sur la bibliothèque de type d'ADO dans ta propre bibliothèque de type (éditeur de tlb, onglet "use" (utilise) sur la racine de l'arbre.) Ainsi tu peux bénéficier des types classiques (_recordset par exemple) définis dans ADO. Attention cette solution suppose que la couche ADO soit installé sur la machine du client !

    Si la contrainte d'avoir ADO installé est trop importante tu peux définir tes propres objets enregistrement et recordset...

    Happy Ole !

    Pascal

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 54
    Points : 36
    Points
    36
    Par défaut
    Merci des infos. Je vais maintenant me renseigner pour savoir ce qu'est ADO. Au passage, je n'utilise pas de bibliothèque de type.

  7. #7
    Rédacteur

    Inscrit en
    Mars 2005
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 38
    Points : 450
    Points
    450
    Par défaut
    Bonjour,

    Dans ton dernier message tu écris : "Au passage, je n'utilise pas de bibliothèque de type".

    Il est impossible SANS bibliothèque de type d'interfacer via l'Automation un programme externe (FoxPro) avec un serveur Automation (Delphi).

    Pascal

Discussions similaires

  1. [A-03] Recherche dans objet OLE
    Par zilou1 dans le forum VBA Access
    Réponses: 1
    Dernier message: 21/01/2009, 16h06
  2. Faire défiler un document dans objet OLE
    Par Janny dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 26/07/2007, 16h16
  3. Réponses: 2
    Dernier message: 12/07/2007, 15h18
  4. Type de texte "Objet OLE"
    Par Flow56 dans le forum IHM
    Réponses: 12
    Dernier message: 04/05/2007, 14h42

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