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 :

Objet COM EOleSysError


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2010
    Messages : 60
    Points : 78
    Points
    78
    Par défaut Objet COM EOleSysError
    Bonjour à tous,

    J'essaye d'utiliser un objet COM fourni avec une caméra pour pouvoir développer avec Delphi.
    J'ai bien installé l'objet en faisant Component > Import Component...
    Là j'ai un projet bpl que j'ai compilé après quelques modifs suite à des erreurs.
    J'ai installé mais une EFilerError m'a obligé à renommer 2 composants qui existaient déjà dans un autre package : TImage renommé en TVImage et TDevice renommé en TVDevice.

    Suite à ça, l'installation a été réussie.

    Pour utiliser ces composants j'ai créé un projet tout simple qui utilise le composant TVDevice. Lors de l'exécution j'ai une erreur EOleSysError "Classe non enregistrée".
    J'ai pourtant bien enregistré la dll correspondante dans la BDR.

    Suite à de nombreuses recherches, je n'ai vraiment plus d'idées sur ce que je pourrais faire pour résoudre ce problème. J'ai tout essayé de ce que j'ai trouvé mais rien à faire...
    A noter que quelques classes utilisées dans cet objet COM peuvent être utilisées car je n'ai pas eu cette erreur à l'exécution. Est-ce le renommage de TDevice en TVDevice qui produit cette erreur car TVDevice n'est pas présent dans la dll fournie ?

    Quelqu'un aurait une idée ?

    Merci d'avance !

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Tu n'es pas obligé d'en faire un BPL !
    En général, je n'en fais pas pour trois raisons

    Le BPL c'est surtout pour "poser" le composant sur une TForm
    Si l'ActiveX n'est pas installé, la TForm entière ne peut être créée !
    Je préfère le créer manuellement, gérer les erreurs tel que EOleSysError et dans certains cas,
    je propose même une procédure d'installation
    soit interne, je sais où il est sensé être et je l'installe
    soit externe, un ShellExecute sur une HTTP URL de téléchargement

    l'autre raison, c'est pénible, de devoir recompiler les BPL, d'installer et désinstaller juste pour un pauvre ActiveX

    la 3eme raison, pas besoin de renommer, il suffit d'utiliser la classe en préfixant du nom de l'unité, comme si c'était un namespace !

    De plus, j'encapsule mon ActiveX de Caméra dans une DLL
    Je fourni ma DLL plus celle du fabricant selon les besoins du client, sa présence étant totalement optionnelle
    En fait, mon appli gère plusieurs marques de Caméra\Enregistreur Vidéo,
    j'ai donc mis en place en place un jeu d'interface qui rend totalement abstrait le comportement d'une Caméra selon le même principe que le FMX.Platform.TPlatformServices

    Attention aussi aux histoire 32 et 64Bits
    Si ton exe est 32Bit, il lui faut l'ActiveX 32Bit
    Si un ActiveX 64Bit existe, un exe 32bit n'en connais pas l'existence !

    Pour le renommage, normalement non, c'est le GUID qui compte !

    C'est surprenant d'avoir accès à certaines classes et pas à d'autres !
    Comme si ta DLL n'était pas complètement enregistrée !
    Ou alors, c'est juste des Wrapper et tu n'as pas atteind le moment où ils auront besoin de la DLL

    Tient un code C++Builder illustrant ma technique avec une Caméra Axis

    Code c++ : 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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    //---------------------------------------------------------------------------
    TAxisMediaControl* TxxxCameraAXISTCPIPViewScreenForm::CreateAxisMediaControl()
    {
      TAxisMediaControl * Result = NULL;
      try
      {
        Result = new TAxisMediaControl(this); // c'est lui l'ActiveX
        Result->Align = alClient;
        Result->Parent = this;
        Result->StretchToFit = true;
        Result->MediaUsername = CameraEntity->Login;
        Result->MediaPassword = CameraEntity->PassWord;
        Result->MediaURL = CameraEntity->MediaURL;
        Result->MediaType = "mjpeg-unicast";
        // Result->EnableRecording = true;
        Result->Stop();
        Result->StopRecordMedia();
        Result->OnMouseMove = AxisMediaControlMouseMove;
        Result->OnStatusChange = AxisMediaControlStatusChange;
        Result->OnError = AxisMediaControlError;
      }
      catch(const EOleSysError &eole)
      {
        // Classe non enregistrée
        if (eole.ErrorCode == REGDB_E_CLASSNOTREG)
          ShowAxisMediaControlDownloadPage();
     
        MemoError->Lines->Text = eole.Message + " : " + DWORDToStr(eole.ErrorCode);
        ToggleErrors(true);
      }
      catch(const Exception &e)
      {
        MemoError->Lines->Text = e.Message;
        ToggleErrors(true);
      }
      return Result;
    }
     
    //---------------------------------------------------------------------------
    void TxxxCameraAXISTCPIPViewScreenForm::ShowAxisMediaControlDownloadPage()
    {
      if (MessageDlg(Translate(SConfirmationShowAxisMediaControlDownloadPage), mtConfirmation, mbYesNo, 0) == mrYes)
        CameraPurpose->ShowCameraInWebBrowser(true); // Force IE pour un téléchargement d'ActiveX !
    }
     
    //---------------------------------------------------------------------------
    BSTR __fastcall TxxxCameraAXIS_TCPIP_EntityPurpose::GetURLForWebBrowser()
    {
      FURLForWebBrowser = "http://" + CameraEntity->AddressIP;
      return FURLForWebBrowser.c_bstr();
    }
     
    //---------------------------------------------------------------------------
    void TxxxCameraAXIS_TCPIP_EntityPurpose::ShowCameraInWebBrowser(bool AForceMSIExplore/* = false*/)
    {
      String HTTPURL = GetURLForWebBrowser();
     
      if ( ! HTTPURL.IsEmpty())
      {
        String ShellFile;
        String ShellParams;
        if (AForceMSIExplore)
        {
          ShellFile = "iexplore";
          ShellParams = HTTPURL;
        }
        else
          ShellFile = HTTPURL;
     
        ShellExecuteW(NULL, L"Open" , ShellFile.c_str(), ShellParams.c_str(), NULL, SW_SHOWDEFAULT);
      }
    }
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2010
    Messages : 60
    Points : 78
    Points
    78
    Par défaut
    Merci pour ta réponse, j'ai donc désinstallé mon Bpl car il ne sert à rien c'est vrai.
    Je crée manuellement mes objets.

    J'ai encore le problème de Classe non enregistrée lorsque j'utilise une des classes de mon fichier TLB converti en .pas
    Et je maintiens le fait que je peux utiliser certaines classes sans avoir d'erreur et d'autres qui provoquent la EOleSysError... Je ne vois vraiment pas pourquoi.

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    tu n'as pas un accès web sur ta caméra ?

    pour avoir une image en 320x240 :
    http://ip/axis-cgi/jpg/image.cgi?resolution=320x240

    c'est tout de même plus simple qu'un ActiveX

    et pour avoir les images en série (jpegmotion)
    http://ip/axis-cgi/mjpg/video.cgi?resolution=320x240
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2010
    Messages : 60
    Points : 78
    Points
    78
    Par défaut
    Je n'utilise pas de caméra Axis.

    J'ai peut-être trouvé la solution. Dans mon fichier TLB, il y a des classes mais aussi des interfaces. Si j'utilise les interfaces je n'ai plus de soucis de Classe non enregistrée. J'ai déjà pû récupérer le nom de ma caméra et je suis en train de m'arracher les cheveux pour pouvoir obtenir une image car elle est très compliquée à utiliser je trouve... J'avais déjà fait un programme en C# avec Visual Studio pour cette caméra mais là, la façon de procéder ne semble pas du tout la même.

    En tout cas mon problème majeur semble résolu, merci pour vos conseils qui m'ont bien aidé ! Et ShailLeTroll, je suis très intéressé par ta DLL qui permet d'utiliser plusieurs caméras de différentes marques car je serai sûrement amener à utiliser d'autres caméras. Pourrais-tu m'expliquer le principe ?

    Merci !

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    [HORS SUJET AXIS]

    Citation Envoyé par Paul TOTH Voir le message
    tu n'as pas un accès web sur ta caméra
    Euh AXIS c'était mon exemple de code !
    DuffNut n'a pas précisé la marque utilisée

    AXIS, c'est l'une des rares que j'utilise via un ActiveX
    les autres c'est un protocole maison ou un SDK C !

    Sinon, dans mon cas, c'est une inclusion de Caméra dans un moniteur de vidéo surveillance pouvant monter à 64 cases par écran, le mode Web n'est pas approprié

    D'ailleurs le client web Axis installe un ActiveX pour IE, d'où ma tricherie pour l'installer si il ne l'est pas, la caméra dans son serveur web interne contient l'ActiveX

    Sinon, je confirme tes URL, l'activeX utilise la même chose

    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //---------------------------------------------------------------------------
    WideString __fastcall TxxxCameraAXIS_TCPIP_Entity::GetMediaURL()
    {
      return "http://" + AddressIP + "/axis-cgi/mjpg/video.cgi";
    }
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    [POUR DuffNut]

    Citation Envoyé par DuffNut Voir le message
    Je n'utilise pas de caméra Axis.
    Désolé, j'ai troublé Paul Toth par mon exemple !

    Citation Envoyé par DuffNut Voir le message
    J'ai peut-être trouvé la solution. Dans mon fichier TLB, il y a des classes mais aussi des interfaces. Si j'utilise les interfaces je n'ai plus de soucis de Classe non enregistrée. J'ai déjà pû récupérer le nom de ma caméra et je suis en train de m'arracher les cheveux pour pouvoir obtenir une image car elle est très compliquée à utiliser je trouve... J'avais déjà fait un programme en C# avec Visual Studio pour cette caméra mais là, la façon de procéder ne semble pas du tout la même.
    Il y a les interfaces où tu dois faire les CoCreateInstance ou équivalent du COM
    Il y a les classes Wrapper qui normalement facilite l'utilisation des interfaces surtout dans le cas d'un OLEControl

    Citation Envoyé par DuffNut Voir le message
    En tout cas mon problème majeur semble résolu, merci pour vos conseils qui m'ont bien aidé ! Et ShailLeTroll, je suis très intéressé par ta DLL qui permet d'utiliser plusieurs caméras de différentes marques car je serai sûrement amener à utiliser d'autres caméras. Pourrais-tu m'expliquer le principe ?
    Si tu es intéressé, j'ai eu quelques soucis en C++Builder 2007 sur les interfaces et supports dont voici des extraits de code
    L'arrivée de FMX a semble-t-il été l'origine de correction de la gestion des interfaces en C++, j'ai plus simplifié mon code en C++Builder XE3

    Ce n'est pas qu'une DLL
    En fait, j'ai une DLL par marque de Caméra et une DLL par marque de DVR
    C'est même plus général, c'est prévu pour gérer l'ensemble des Hardware que mon superviseur peut manipuler
    Ces DLL encapsule :
    - des ActiveX,
    - des DLL d'SDK
    - du code HTTP ou TCP codé à la mano
    ...

    Il y a pas mal de code en dur monomarque, lorsque je dois ajouter un nouveau protocol, j'en profite pour faire un refactoring pour dissocier le code appelant de la logique limitée d'un seul appareil vers un système d'interface au sens OO

    J'ai ainsi un tas de DLL qui encapsule les spécificités du matériel et de ses protocoles (une même DLL peut proposer plusieurs modèles d'interfaçage)

    Comme chaque Caméra ou DVR offre des fonctionnalités similaires mais d'un fonctionnement différent, je dois trouver les points communs pour en extraire un comportement général assez souple

    Et certains périphériques proposent des fonctionnalités que je détourne pour obtenir de l'extérieur le comportement que j'attends !


    Il interroge le Hardware via la fonction Supports, le même fonctionnement que le TPlatformServices de FMX et son SupportsPlatformService

    J'ai plus de 200 interfaces décrivant les actions possibles avec un Hardware, c'est le même principe que IFMXMouseService, IFMXTimerService ou IFMXDialogService.DialogPageSetup et IFMXDialogService.DialogPrinterSetup ...

    Au même titre, j'ai une série d'interface
    Rien que pour la partie recensement d'une DLL de Hardware

    Code c++ : 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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    /* Forward Declarations */
    class IShaiHardwareProvider; // C++ interface
    class IShaiHardwareProviderEvents; //  C++ interface - Implémentation par l'Appelant !!!
    class IShaiHardwareModelList; //  C++ interface
    class IShaiHardwareModel; //  C++ interface
    class IShaiHardwareConfigurableObject; //  C++ interface
    class IShaiHardwareConfigurationScreen; //  C++ interface
    class IShaiHardwareEntity; //  C++ interface
    class IShaiHardwareLinkedDevice; //  C++ interface - Implémentation par l'Appelant !!!
    class IShaiHardwareLinkedDeviceManager; //  C++ interface - Implémentation par l'Appelant !!!
    class IShaiHardwareLinkedDeviceList; //  C++ interface - Implémentation par l'Appelant !!!
    class IShaiHardwareActionsReflexesAction; //  C++ interface
     
    /* Forward Declarations */
    __interface INTERFACE_UUID("{E7D05B47-1CCF-4578-9870-B4ED197EA3CF}") IShaiHardwareEntityPurpose; // C++ GUID interface
    typedef System::DelphiInterface <IShaiHardwareEntityPurpose>  _di_ShaiHardwareEntityPurpose; // Delphi interface
    typedef _di_ShaiHardwareEntityPurpose IShaiHardwareEntityPurposeDelphiInterface; // Delphi interface alias
     
    __interface INTERFACE_UUID("{765A7FE0-6B6F-456E-B5E2-C22A5AB7EE18}") IShaiHardwareEntityPurposeHTTPAccess; // C++ GUID interface
    typedef System::DelphiInterface <IShaiHardwareEntityPurposeHTTPAccess>  _di_ShaiHardwareEntityPurposeHTTPAccess; // Delphi interface
    typedef _di_ShaiHardwareEntityPurposeHTTPAccess IShaiHardwareEntityPurposeHTTPAccessDelphiInterface; // Delphi interface alias
     
    __interface INTERFACE_UUID("{D53936AE-B8E3-4DDB-AFDD-E27D235B46E5}") IShaiHardwareProviderExternalSoftware; // C++ GUID interface
    typedef System::DelphiInterface <IShaiHardwareProviderExternalSoftware>  _di_ShaiHardwareProviderExternalSoftware; // Delphi interface
    typedef _di_ShaiHardwareProviderExternalSoftware IShaiHardwareProviderExternalSoftwareDelphiInterface; // Delphi interface alias
     
    __interface INTERFACE_UUID("{F66B97EB-901F-4DBC-998E-3EF39EEEF790}") IShaiHardwareActionsReflexes; // C++ GUID interface
    typedef System::DelphiInterface <IShaiHardwareActionsReflexes>  _di_ShaiHardwareActionsReflexes; // Delphi interface
    typedef _di_ShaiHardwareActionsReflexes IShaiHardwareActionsReflexesDelphiInterface; // Delphi interface alias
     
    __interface INTERFACE_UUID("{169DF80F-8F8C-472E-AE20-5276CF9F30AB}") IShaiHardwareConfigurationScreenInteraction; // C++ GUID interface
    typedef System::DelphiInterface <IShaiHardwareConfigurationScreenInteraction>  _di_ShaiHardwareConfigurationScreenInteraction; // Delphi interface
    typedef _di_ShaiHardwareConfigurationScreenInteraction IShaiHardwareConfigurationScreenInteractionDelphiInterface; // Delphi interface alias
     
    __interface INTERFACE_UUID("{637D8755-672B-4D43-A21B-950CCF3AE7F5}") IShaiHardwareConfigurationQuickScreenAvailable; // C++ GUID interface
    typedef System::DelphiInterface <IShaiHardwareConfigurationQuickScreenAvailable>  _di_ShaiHardwareConfigurationQuickScreenAvailable; // Delphi interface
    typedef _di_ShaiHardwareConfigurationQuickScreenAvailable IShaiHardwareConfigurationQuickScreenAvailableDelphiInterface; // Delphi interface alias
     
    __interface INTERFACE_UUID("{F975E629-09E5-4EB9-A5A6-26149BE22E8B}") IShaiHardwareEntityPurposeAuthenticationManager; // C++ GUID interface
    typedef System::DelphiInterface <IShaiHardwareEntityPurposeAuthenticationManager>  _di_ShaiHardwareEntityPurposeAuthenticationManager; // Delphi interface
    typedef _di_ShaiHardwareEntityPurposeAuthenticationManager IShaiHardwareEntityPurposeAuthenticationManagerDelphiInterface; // Delphi interface alias
     
    __interface INTERFACE_UUID("{68A719A9-7D18-4C39-A3B8-E464D1F1EEBF}") IShaiHardwareAuthenticationMethod; // C++ GUID interface
    typedef System::DelphiInterface <IShaiHardwareAuthenticationMethod>  _di_ShaiHardwareAuthenticationMethod; // Delphi interface
    typedef _di_ShaiHardwareAuthenticationMethod IShaiHardwareAuthenticationMethodDelphiInterface; // Delphi interface alias
     
    __interface INTERFACE_UUID("{FC97E4C6-0D1E-4283-9351-2B32194FB7FE}") IShaiHardwareAuthenticationMethodBasicUsedByDefault; // C++ GUID interface
    typedef System::DelphiInterface <IShaiHardwareAuthenticationMethodBasicUsedByDefault>  _di_ShaiHardwareAuthenticationMethodBasicUsedByDefault; // Delphi interface
    typedef _di_ShaiHardwareAuthenticationMethodBasicUsedByDefault IShaiHardwareAuthenticationMethodBasicUsedByDefaultDelphiInterface; // Delphi interface alias
     
    __interface INTERFACE_UUID("{3E9108DA-F4FD-4CE0-9E56-14BA86711A1E}") IShaiHardwareProviderCapabilities; // C++ GUID interface
    typedef System::DelphiInterface <IShaiHardwareProviderCapabilities>  _di_ShaiHardwareProviderCapabilities; // Delphi interface
    typedef _di_ShaiHardwareProviderCapabilities IShaiHardwareProviderCapabilitiesDelphiInterface; // Delphi interface alias

    Après pour les caméras, j'ai bien plus

    Code c++ : 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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    /* Forward Declarations */
    class IShaiCameraView; // C++ interface
    class IShaiCameraViewNotifier; // C++ interface
    class IShaiCameraRecorder; // C++ interface
    class IShaiCameraDownloader; // C++ interface
    class IShaiCameraDownloadableRecorder; // C++ interface
    class IShaiCameraRecordingTrigger; // C++ interface
    class IShaiCameraRecordingDownloadableTrigger; // C++ interface
    class IShaiCameraActionsReflexesAction; //  C++ interface
    class IShaiCameraActionsReflexesActionable; //  C++ interface
    class IShaiCameraActionsReflexesActionRecordingByDirect; //  C++ interface
    class IShaiCameraActionsReflexesActionRecordingByTrigger; //  C++ interface
    class IShaiCameraActionsReflexesActionPTZ; //  C++ interface
    class IShaiCameraArchive; //  C++ interface
    class IShaiCameraPlayback; //  C++ interface
    class IShaiCameraPlaybackNotifier; // C++ interface
    class IShaiCameraPermanentConnection; // C++ interface
     
    enum TShaiHardwareCameraState : int;
    enum TShaiHardwareCameraError : int;
     
    /* Forward Declarations */
    __interface INTERFACE_UUID("{2A5F736F-5C66-4DA2-83AE-2F1E2E7D25E4}") IShaiCameraProviderCapability; // C++ GUID interface
    typedef System::DelphiInterface <IShaiCameraProviderCapability> _di_ShaiCameraProviderCapability; // Delphi interface
    typedef _di_ShaiCameraProviderCapability IShaiCameraProviderCapabilityDelphiInterface; // Delphi interface alias
     
    __interface INTERFACE_UUID("{8A5D3B68-0843-49E6-A15B-220BA1DA0E91}") IShaiCameraEntityPurpose; // C++ GUID interface
    typedef System::DelphiInterface <IShaiCameraEntityPurpose> _di_ShaiCameraEntityPurpose; // Delphi interface
    typedef _di_ShaiCameraEntityPurpose IShaiCameraEntityPurposeDelphiInterface; // Delphi interface alias
     
    __interface INTERFACE_UUID("{4BDB9A68-258B-4CD6-A4FE-54C6C7C793C9}") IShaiCameraEntityViewable; // C++ GUID interface
    typedef System::DelphiInterface <IShaiCameraEntityViewable> _di_ShaiCameraEntityViewable; // Delphi interface
    typedef _di_ShaiCameraEntityViewable IShaiCameraEntityViewableDelphiInterface; // Delphi interface alias
     
    __interface INTERFACE_UUID("{51165609-AB85-4903-A0BD-A9485A60EDF6}") IShaiCameraEntityPollable; // C++ GUID interface
    typedef System::DelphiInterface <IShaiCameraEntityPollable> _di_ShaiCameraEntityPollable; // Delphi interface
    typedef _di_ShaiCameraEntityPollable IShaiCameraEntityPollableDelphiInterface; // Delphi interface alias
     
    __interface INTERFACE_UUID("{718266FA-FBEF-4730-95B8-4AEA7D988546}") IShaiCameraEntityPermanentConnectionAvailable; // C++ GUID interface
    typedef System::DelphiInterface <IShaiCameraEntityPermanentConnectionAvailable> _di_ShaiCameraEntityPermanentConnectionAvailable; // Delphi interface
    typedef _di_ShaiCameraEntityPermanentConnectionAvailable IShaiCameraEntityPermanentConnectionAvailableDelphiInterface; // Delphi interface alias
     
    __interface INTERFACE_UUID("{E1A1C9F2-7346-47B0-8EC5-88E9F6231EC6}") IShaiCameraEntityRecordable; // C++ GUID interface
    typedef System::DelphiInterface <IShaiCameraEntityRecordable> _di_ShaiCameraEntityRecordable; // Delphi interface
    typedef _di_ShaiCameraEntityRecordable IShaiCameraEntityRecordableDelphiInterface; // Delphi interface alias
     
    __interface INTERFACE_UUID("{FD97E46F-0932-4A8B-9FFD-C3D13657B582}") IShaiCameraEntityRecorderIsDownloadable; // C++ GUID interface
    typedef System::DelphiInterface <IShaiCameraEntityRecorderIsDownloadable> _di_ShaiCameraEntityRecorderIsDownloadable; // Delphi interface
    typedef _di_ShaiCameraEntityRecorderIsDownloadable IShaiCameraEntityRecorderIsDownloadableDelphiInterface; // Delphi interface alias
     
    __interface INTERFACE_UUID("{CA53910C-A9CD-4DF2-9ECD-C97F9914DA92}") IShaiCameraEntityDownloadable; // C++ GUID interface
    typedef System::DelphiInterface <IShaiCameraEntityDownloadable> _di_ShaiCameraEntityDownloadable; // Delphi interface
    typedef _di_ShaiCameraEntityDownloadable IShaiCameraEntityDownloadableDelphiInterface; // Delphi interface alias
     
    __interface INTERFACE_UUID("{E5319F6E-4224-4C93-A38E-3AE96728290C}") IShaiCameraEntityRecordingTriggerable; // C++ GUID interface
    typedef System::DelphiInterface <IShaiCameraEntityRecordingTriggerable> _di_ShaiCameraEntityRecordingTriggerable; // Delphi interface
    typedef _di_ShaiCameraEntityRecordingTriggerable IShaiCameraEntityRecordingTriggerableDelphiInterface; // Delphi interface alias
     
    __interface INTERFACE_UUID("{2D4C9B79-AE03-4782-8508-A17AEFC4C092}") IShaiCameraEntityRecordingTriggerIsDownloadable; // C++ GUID interface
    typedef System::DelphiInterface <IShaiCameraEntityRecordingTriggerIsDownloadable> _di_ShaiCameraEntityRecordingTriggerIsDownloadable; // Delphi interface
    typedef _di_ShaiCameraEntityRecordingTriggerIsDownloadable IShaiCameraEntityRecordingTriggerIsDownloadableDelphiInterface; // Delphi interface alias
     
    __interface INTERFACE_UUID("{A5F43459-55EB-46A4-A233-E189DD1D9921}") IShaiCameraEntityActionsReflexes; // C++ GUID interface
    typedef System::DelphiInterface <IShaiCameraEntityActionsReflexes>  _di_ShaiCameraEntityActionsReflexes; // Delphi interface
    typedef _di_ShaiCameraEntityActionsReflexes IShaiCameraEntityActionsReflexesDelphiInterface; // Delphi interface alias
     
    __interface INTERFACE_UUID("{8EEB62F2-4DAF-4C5D-AD22-E7C2B036D604}") IShaiCameraEntityArchiveManagerAvailable; // C++ GUID interface
    typedef System::DelphiInterface <IShaiCameraEntityArchiveManagerAvailable> _di_ShaiCameraEntityArchiveManagerAvailable; // Delphi interface
    typedef _di_ShaiCameraEntityArchiveManagerAvailable IShaiCameraEntityArchiveManagerAvailableDelphiInterface; // Delphi interface alias
     
    __interface INTERFACE_UUID("{64451F35-05B3-48C5-876E-01B0E078FCE8}") IShaiCameraEntityPlaybackAvailable; // C++ GUID interface
    typedef System::DelphiInterface <IShaiCameraEntityPlaybackAvailable> _di_ShaiCameraEntityPlaybackAvailable; // Delphi interface
    typedef _di_ShaiCameraEntityPlaybackAvailable IShaiCameraEntityPlaybackAvailableDelphiInterface; // Delphi interface alias
     
    __interface INTERFACE_UUID("{EC3EC225-BCD1-41CC-B524-C785D67C668C}") IShaiCameraEntityUnexpectedLogoutEventAvailable; // C++ GUID interface
    typedef System::DelphiInterface <IShaiCameraEntityUnexpectedLogoutEventAvailable> _di_ShaiCameraEntityUnexpectedLogoutEventAvailable; // Delphi interface
    typedef _di_ShaiCameraEntityUnexpectedLogoutEventAvailable IShaiCameraEntityUnexpectedLogoutEventAvailableDelphiInterface; // Delphi interface alias
     
    __interface INTERFACE_UUID("{08EBFFEB-7B05-48BD-9C22-979549D7CDCA}") IShaiCameraEntityVideoLostEventAvailable; // C++ GUID interface
    typedef System::DelphiInterface <IShaiCameraEntityVideoLostEventAvailable> _di_ShaiCameraEntityVideoLostEventAvailable; // Delphi interface
    typedef _di_ShaiCameraEntityVideoLostEventAvailable IShaiCameraEntityVideoLostEventAvailableDelphiInterface; // Delphi interface alias
     
    __interface INTERFACE_UUID("{8E72EDC3-AFFB-415D-A919-D998C9A4106B}") IShaiCameraEntityMotionDetectionAvailable; // C++ GUID interface
    typedef System::DelphiInterface <IShaiCameraEntityMotionDetectionAvailable> _di_ShaiCameraEntityMotionDetectionAvailable; // Delphi interface
    typedef _di_ShaiCameraEntityMotionDetectionAvailable IShaiCameraEntityMotionDetectionAvailableDelphiInterface; // Delphi interface alias
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  8. #8
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2010
    Messages : 60
    Points : 78
    Points
    78
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Euh AXIS c'était mon exemple de code !
    DuffNut n'a pas précisé la marque utilisée
    En fait, j'utilise une caméra VRmagic, j'ai réussi à avoir une image avec la méthode LockNextImage mais je ne vois pas du tout comment l'afficher dans un composant TImage... Si quelqu'un connait ce genre de caméra et a déjà travaillé dessus, je suis preneur.

    Merci pour ton explication Shai, il faudrait que j'étudie ça un peu plus tard, ça pourrait m'être utile !

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    [HORS SUJET AXIS]


    Euh AXIS c'était mon exemple de code !
    DuffNut n'a pas précisé la marque utilisée

    AXIS, c'est l'une des rares que j'utilise via un ActiveX
    les autres c'est un protocole maison ou un SDK C !

    Sinon, dans mon cas, c'est une inclusion de Caméra dans un moniteur de vidéo surveillance pouvant monter à 64 cases par écran, le mode Web n'est pas approprié

    D'ailleurs le client web Axis installe un ActiveX pour IE, d'où ma tricherie pour l'installer si il ne l'est pas, la caméra dans son serveur web interne contient l'ActiveX

    Sinon, je confirme tes URL, l'activeX utilise la même chose

    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //---------------------------------------------------------------------------
    WideString __fastcall TxxxCameraAXIS_TCPIP_Entity::GetMediaURL()
    {
      return "http://" + AddressIP + "/axis-cgi/mjpg/video.cgi";
    }

    OK j'avais pas vu

    dans le genre j'ai développé une appli Delphi qui fait proxy, elle charge les images d'une caméra à haut débit sur le réseau local et baisse le frame rate à destination des PC sur le net, sinon tu obtiens vite un décalage désagréable.

    et pour faciliter mes tests j'ai fait une PseudoCamera aussi , c'est un programme qui réagit comme une caméra en diffusant des images.


    Attention, Chrome 29 ne sait plus lire un flux Motion JPEG directement, il faut passer par une page web... IE ne sait toujours pas les gérer.
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <html><body>
    <img src="http://127.0.0.1:8082">
    </body></html>
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

Discussions similaires

  1. Réponses: 16
    Dernier message: 06/06/2007, 12h42
  2. [Définition] Objet COM
    Par Etanne dans le forum Windows
    Réponses: 4
    Dernier message: 19/08/2004, 18h44
  3. Objet COM ou pas en réseau ?
    Par corwin_d_ambre dans le forum Web & réseau
    Réponses: 11
    Dernier message: 13/07/2004, 17h38
  4. [objets COM] "Catastrophic failure"
    Par Air'V dans le forum ASP
    Réponses: 5
    Dernier message: 10/09/2003, 11h45
  5. Désenregistrement d'Objets COM sous Windows
    Par barthelv dans le forum Windows
    Réponses: 2
    Dernier message: 21/05/2003, 15h11

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