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

Langage Delphi Discussion :

DLL Delphi pour utilisation sous C++ Builder


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut DLL Delphi pour utilisation sous C++ Builder
    Bonjour à tous

    Je vous explique mon problème

    Je travaille sous C++ Builder et je désire faire lire en boucle plusieurs vidéos en même temps. Si j'utilise le composant MediaPlayer classique, ca rame.

    Je me suis donc tourné vers le composant ActivX WindowsMediaPlayer pour lequel on peut spécifier le mode de lecture en boucle (setMode).

    Or, je n'arrive justement pas à affecter le Mode en C++. Voir ici sur le forum C++Builder

    J'ai essayer de faire la même chose en Delphi et là, aucun problème tout fonctionne et sans ramer.

    Je voudrais donc si cela est possible créer une DLL en Delphi permettant la création d'un TWindowsMediaPlayer avec effectation du Mode à loop.

    Voilà donc ce que j'ai écrit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    library DLLMediaPlayer;
    uses
      SysUtils,
      Classes,
      WMPLib_TLB in 'c:\program files\borland\bds\4.0\Imports\WMPLib_TLB.pas';
     
    {$R *.res}
     
    function CreerMediaPlayer(Appelant: TComponent):TWindowMediaPlayer;export;
    var
      MediaPlayer: TWindowsMediaPlayer;
    begin
      // On crée le MediaPlayer
      MediaPlayer := TWindowsMediaPlayer.Create(Appelant);
     
      // On renseigne son mode de lecture
      MediaPlayer.settings.setMode('loop', True);
     
      // On affecte le MediaPlayer comme retour de la fonction
      CreerMediaPlayer := MediaPlayer;
    end;
    exports CreerMediaPlayer;
     
     
    begin
     
     
    end.
    Quand j'appelle ma fonction après l'avoir déclarer comme importer de la DLL, j'ai une erreur comme quoi je ne peux pas convertir un TWindowsMediaPlayer en TWindowsMediaPlayer *

    J'ai besoin d'un pointeur sur un TWindowsMediaPlayer, comme puis-je faire pour que ma fonction m'en retourne un

    Merci d'avance

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    alors sans aucune garantie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    library DLLMediaPlayer;
    uses
      SysUtils,
      Classes,
      WMPLib_TLB in 'c:\program files\borland\bds\4.0\Imports\WMPLib_TLB.pas';
     
    {$R *.res}
     
    function CreerMediaPlayer(Appelant: TComponent):Pointer;export;
    var
      MediaPlayer: TWindowsMediaPlayer;
    begin
      // On crée le MediaPlayer
      MediaPlayer := TWindowsMediaPlayer.Create(Appelant);
     
      // On renseigne son mode de lecture
      MediaPlayer.settings.setMode('loop', True);
     
      // On affecte le MediaPlayer comme retour de la fonction
      CreerMediaPlayer := @MediaPlayer;
    end;
    exports CreerMediaPlayer;
     
     
    begin
     
     
    end.

  3. #3
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    YEARK !!!

    on ne peut pas passer une instance d'objet Delphi d'une DLL à un Executation DELPHI sans utiliser ShareMem...alors pour passer à C++ Builder je te souhaite bien du plaisir

    dans ce genre de situation, il faut créer un Wrapper de classe (ce qu'on fait généralement pour passer de C++ à Delphi d'ailleurs)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    function GetMediaPlayer:THandle; stdcall;
    begin
     MediaPlayer:=TWindowsMediaPlayer.Create(nil);
     Result:=THandle(MediaPlayer);
    end;
     
    procedure FreeMediaPlayer(Player:THandle); stdcall;
    begin
     TWindowsMediaplayer(Player).Free;
    end;
    en réalité, tu peux très bien garder le type TMediaPlayer DANS la DLL, mais du côté C++ tu considères que c'est un Handle opaque.

    il faut aussi que tu ajoutes toutes les fonctions que tu utilises dans ta DLL...exemple (je ne connais pas cet objet donc j'invente) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function MediaPlayerOpen(Player:TWindowsMediaPlayer; FileName:pchar):boolean; stdcall;
    begin
     Result:=Player.Open(FileName);
    end;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  4. #4
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    Merci pour votre aide à tous les deux.
    Je vais regarder ca.

  5. #5
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    J'ai toujours un petit souci, comment je fait pour affecter mon Objet WindowsMediaPlayer à un Panel ?

  6. #6
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 704
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 704
    Par défaut
    Citation Envoyé par kurul1 Voir le message
    J'ai toujours un petit souci, comment je fait pour affecter mon Objet WindowsMediaPlayer à un Panel ?
    Visuellement, tu veux dire ?
    En lui donnant son parent, non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WindowsMediaPlayer.Parent := Panel;
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

Discussions similaires

  1. Réponses: 1
    Dernier message: 06/09/2007, 10h59
  2. [VB6 > VB.Net] Comment réussir la migration pour utilisation sous VS2003 ?
    Par sympatique dans le forum Accès aux données
    Réponses: 3
    Dernier message: 15/08/2006, 21h32
  3. Réponses: 1
    Dernier message: 30/06/2006, 15h49
  4. Réponses: 2
    Dernier message: 05/04/2006, 12h49
  5. VCL de Crystal Report pour utilisation dans C++Builder
    Par dibak dans le forum C++Builder
    Réponses: 4
    Dernier message: 16/02/2004, 17h04

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