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 :

Erreur avec GetWMIstring


Sujet :

Langage Delphi

  1. #21
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Bonjour/re

    Citation Envoyé par Just-Soft Voir le message
    je ne vois pas trop le lien avec le message d'erreur 'impossible de convertir *****'
    ah mais il ne s'agit pas du même message qu'au début (Opération de variant incorrecte) !
    je suis perdu ! il s'agit d'un message fourni par WMI Delphi Code Creator ou bien d'un message venant de ton programme ?
    et si tu nous refaisais un petit programme test avec ton code ?
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  2. #22
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Bonjour/re


    ah mais il ne s'agit pas du même message qu'au début (Opération de variant incorrecte) !
    je suis perdu ! il s'agit d'un message fourni par WMI Delphi Code Creator ou bien d'un message venant de ton programme ?
    et si tu nous refaisais un petit programme test avec ton code ?
    la faute m’incombe ... effectivement c'est une autre erreur issu cette fois-ci du WMI Delphi Code Creator

    je prends le cas de ce code
    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
    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
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    //-----------------------------------------------------------------------------------------------------
    //     This code was generated by the Wmi Delphi Code Creator (WDCC) Version 1.9.9.350
    //     http://code.google.com/p/wmi-delphi-code-creator/
    //     Blog http://theroadtodelphi.wordpress.com/wmi-delphi-code-creator/
    //     Author Rodrigo Ruz V. (RRUZ) Copyright (C) 2011-2015 
    //----------------------------------------------------------------------------------------------------- 
    //
    //     LIABILITY DISCLAIMER
    //     THIS GENERATED CODE IS DISTRIBUTED "AS IS". NO WARRANTY OF ANY KIND IS EXPRESSED OR IMPLIED.
    //     YOU USE IT AT YOUR OWN RISK. THE AUTHOR NOT WILL BE LIABLE FOR DATA LOSS,
    //     DAMAGES AND LOSS OF PROFITS OR ANY OTHER KIND OF LOSS WHILE USING OR MISUSING THIS CODE.
    //
    //----------------------------------------------------------------------------------------------------
    program GetWMI_Info;
     
    {$APPTYPE CONSOLE}
     
    uses
      SysUtils,
      ActiveX,
      ComObj,
      Variants;
     
     
     
    // La classe CIM_Card représente un type de conteneur physique qui peut être 
    // branché dans une autre carte ou une carte hôte ou est lui-même une carte/carte 
    // mère hôte dans un châssis. La classe CIM_Card inclut tout package capable de 
    // porter des signaux et fournir un point de montage pour des composants physiques 
    // tels que des puces ou d’autres packages physiques comme d’autres cartes.
     
    procedure  GetCIM_CardInfo;
    const
      WbemUser            ='';
      WbemPassword        ='';
      WbemComputer        ='localhost';
      wbemFlagForwardOnly = $00000020;
    var
      FSWbemLocator : OLEVariant;
      FWMIService   : OLEVariant;
      FWbemObjectSet: OLEVariant;
      FWbemObject   : OLEVariant;
      oEnum         : IEnumvariant;
      iValue        : LongWord;
    begin;
      FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
      FWMIService   := FSWbemLocator.ConnectServer(WbemComputer, 'root\CIMV2', WbemUser, WbemPassword);
      FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM CIM_Card','WQL',wbemFlagForwardOnly);
      oEnum         := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
      while oEnum.Next(1, FWbemObject, iValue) = 0 do
      begin
        Writeln(Format('Caption                    %s',[String(FWbemObject.Caption)]));// String
        Writeln(Format('CreationClassName          %s',[String(FWbemObject.CreationClassName)]));// String
        Writeln(Format('Depth                      %n',[Double(FWbemObject.Depth)]));// Real32
        Writeln(Format('Description                %s',[String(FWbemObject.Description)]));// String
        Writeln(Format('Height                     %n',[Double(FWbemObject.Height)]));// Real32
        Writeln(Format('HostingBoard               %s',[String(FWbemObject.HostingBoard)]));// Boolean
        Writeln(Format('HotSwappable               %s',[String(FWbemObject.HotSwappable)]));// Boolean
        Writeln(Format('InstallDate                %s',[String(FWbemObject.InstallDate)]));// Datetime
        Writeln(Format('Manufacturer               %s',[String(FWbemObject.Manufacturer)]));// String
        Writeln(Format('Model                      %s',[String(FWbemObject.Model)]));// String
        Writeln(Format('Name                       %s',[String(FWbemObject.Name)]));// String
        Writeln(Format('OtherIdentifyingInfo       %s',[String(FWbemObject.OtherIdentifyingInfo)]));// String
        Writeln(Format('PartNumber                 %s',[String(FWbemObject.PartNumber)]));// String
        Writeln(Format('PoweredOn                  %s',[String(FWbemObject.PoweredOn)]));// Boolean
        Writeln(Format('Removable                  %s',[String(FWbemObject.Removable)]));// Boolean
        Writeln(Format('Replaceable                %s',[String(FWbemObject.Replaceable)]));// Boolean
        Writeln(Format('RequirementsDescription    %s',[String(FWbemObject.RequirementsDescription)]));// String
        Writeln(Format('RequiresDaughterBoard      %s',[String(FWbemObject.RequiresDaughterBoard)]));// Boolean
        Writeln(Format('SerialNumber               %s',[String(FWbemObject.SerialNumber)]));// String
        Writeln(Format('SKU                        %s',[String(FWbemObject.SKU)]));// String
        Writeln(Format('SlotLayout                 %s',[String(FWbemObject.SlotLayout)]));// String
        Writeln(Format('SpecialRequirements        %s',[String(FWbemObject.SpecialRequirements)]));// Boolean
        Writeln(Format('Status                     %s',[String(FWbemObject.Status)]));// String
        Writeln(Format('Tag                        %s',[String(FWbemObject.Tag)]));// String
        Writeln(Format('Version                    %s',[String(FWbemObject.Version)]));// String
        Writeln(Format('Weight                     %n',[Double(FWbemObject.Weight)]));// Real32
        Writeln(Format('Width                      %n',[Double(FWbemObject.Width)]));// Real32
     
        Writeln('');
        FWbemObject:=Unassigned;
      end;
    end;
     
     
    begin
     try
        CoInitialize(nil);
        try
          GetCIM_CardInfo;
        finally
          CoUninitialize;
        end;
     except
        on E:EOleException do
            Writeln(Format('EOleException %s %x', [E.Message,E.ErrorCode])); 
        on E:Exception do
            Writeln(E.Classname, ':', E.Message);
     end;
     Writeln('Press Enter to exit');
     Readln;      
    end.
    en l'exécutant il s'arrête sur la propriété Depth avec le message "Impossible de convertir le variant de type (Null) en type (Double), voici une copie de l'écran suite à l'exécution.

    j'ai testé pas mal de code et j'ai toujours un arrêt quelque part sur une propriété avec un problème de conversion, j'espère avoir était clair cette fois-ci.Nom : Erreur WMI.png
Affichages : 129
Taille : 10,1 Ko
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  3. #23
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Ok, maintenant que je comprends mieux, j'ai pu faire un test, avec le même résultat.
    AMHA c'est parce que Depth n'étant pas renseigné (donc null) la valeur ne peut être "castée"
    il manque dans le programme un test genre if assigned(FWbemObject.Depth) then Writeln(.....) else Writeln('Depth non renseignée'); << ce qui est le cas de ma carte

    pour vérifier, plutôt que de faire le programme, utilises WQL qui après exécution de la requête affiche les données dans une grille
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  4. #24
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    il manque dans le programme un test genre if assigned(FWbemObject.Depth) then Writeln(.....) else Writeln('Depth non renseignée'); << ce qui est le cas de ma carte
    Exactement mais c'est un peu long pour faire le test sur toute les propriétés.

    Citation Envoyé par SergioMaster Voir le message
    pour vérifier, plutôt que de faire le programme, utilises WQL qui après exécution de la requête affiche les données dans une grille
    ça je l'ai déjà fait mais j'ai besoin du code pour l'intégrer quelque part dans ma solution donc faut passer par le WMI Class Code Generation.

    Ce qui revient à dire que le problème ne vient pas de mon OS ou d'un antivirus installé sur mon PC mais c'est une limite du WMI Delphi Code Creator.

    Merci infiniment Serge .
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

Discussions similaires

  1. Erreur Avec Interbase
    Par smokemon dans le forum Bases de données
    Réponses: 1
    Dernier message: 29/10/2004, 07h24
  2. Erreur avec procédure LockWorkStation ...
    Par simonseztech dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 16/08/2004, 15h33
  3. [Débutant][Conception] Erreur avec une classe interne
    Par Devil Redneck dans le forum Général Java
    Réponses: 5
    Dernier message: 11/06/2004, 15h45
  4. Erreur avec les ADO
    Par megane dans le forum Bases de données
    Réponses: 7
    Dernier message: 08/03/2004, 21h37
  5. Erreur avec WM_COMMAND (BN_CLICKED)
    Par cyberlewis dans le forum Windows
    Réponses: 2
    Dernier message: 09/02/2004, 00h25

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