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

VB 6 et antérieur Discussion :

Le BSTR comment fonctionne t'il


Sujet :

VB 6 et antérieur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 309
    Par défaut Le BSTR comment fonctionne t'il
    Bonjour à tous

    Voila, cela fait plusieurs jours que j'essaie de comprendre le format de BSTR
    Et il reste encore pas mal de vide dans mon esprit

    J'ai compris qu'il etait constitué d'une "entete" de 4 octets comprenant la longueur de la string sur laquelle il pointe.

    Mais comment fait on pour acceder à cette longueur, par quelle instruction ???

    Lorque je fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim a As String
    a = "AndreBernard"
    MsgBox VarPtr(a)
    J'obtiens le pointeur de la variable contenant l'adresse de la string, c'est bien ça ???
    Mais pour obtenir le chiffre 12 qui est la longueur de cette variable...comment fait on ???

    Merci de votre aide et bonne journée

  2. #2
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 131
    Par défaut
    Bonjour,
    Moi je veux bien t'aider mais faut en faire de même avec PB
    pour lequel je galère avec les passages d'arguments tableaux lol

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 309
    Par défaut
    Tu es vraiment un ange DarkVader.
    Pour la partie PB, y'a pas de probleme, je la gere.
    Et si ça t'interesse, et si je le peux, je pourrais t'expliquer ce que j'ai compris.
    VB et PB ensemble c'est de la balle.....car ils reunissent a eux deux tout ce qui peut se faire dans la prog.
    VB pour le COM, la POO et PB pour la partie bas niveau, DLL, et fonctions "C"

    En fin de compte, un mec qui maitrise les deux, peut presque avoir la puissance du C, sans jamais avoir a apprendre la dure syntaxe du C
    La preuve c'est que nombreux sont les programmeurs C et Assembleurs qui l'utilisent, c'est donc un gage de puissance et de fiabilité
    Ils disent que lorsqu'il ont besoin de creer un truc rapide, point n'est besoin de sortir la grosse artillerie, car PB sait tres bien se defendre au niveau de la rapidité, car il compile directement en ASM.
    Et en plus....tu peux incorporer au milieu du basic de l'ASM directement, alors imagine la puissance

    PB accede tres facilement a la mémoire, créé des DLL et des EXE portables sur une clef USB sans aucun runtime ni dependances.

    J'ai deja compris pas mal de choses sur les pointeurs, et au pire, j'ai quelques copains qui pouront m'eclairer sur des points precis.

    Ce qui me manque, c'est ta connaissance sur le VB6
    Car presque plus personne ne l'a installé sur sa machine, sauf VBA bien sur.
    Maintenant les gens au pire utilisent DOT.NET express puisqu'il est gratuit

    En fait c'est toi qui possede le savoir le plus compliqué, car "GATINOUS" il a drolement tarabiscoté le VB6 pour qu'il soit soit disant plus simple pour l'utilisateur.
    Personne ne comprend, meme les programmeur C, comment il a tordu son truc.
    En fin de compte le C, parait tres compliqué dans la syntaxe, mais il demeure tres simple dans l'utilisation des pointeurs, des DLL, une fois que l'on a compris ce qu'est un pointeur etc....

    Alors que VB avec ces histoire de BYVAL, STRPTR, BSTR, UNICODE etc...
    J'ai usé plusieurs programmeur qui sont des caids du C, pour qu'a la fin ils abandonnent en me disant de creer une DLL en COM se sera plus simple, tellement ils en avaient marre de se tirer les cheveux sur tout ce "bordel"

    Bilou, il a tout fait pour que le VB ne soit pas bas niveau, caché des fonctions (Varptr, StrPtr), supprimé d'autres comme les PEEK et POKE.
    Il a aussi obligé a utiliser SES DLL activex à la difference des autres langages qui savent creer des DLL comme toutes les autres.
    Certe, il y plusieurs standard d'appel des DLL STDCALL et d'autres, mais PB les gere, et je pense que les langages creant des DLL standard aussi.

    Ce qui m'ennerve dans VB6, c'est toutes ces restrictions qui on été voulues par "CROSOFT" et qui du coups font de VB6 un "sous langage"
    Moi, j'aimerais essayer de retablir la justice
    Et permettre a VB6 de jouer dans la cour des grands et de savoir parler le standard quand il est besoin, et le BSTR/UNICODE quand il parle a sa famille

  4. #4
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 131
    Par défaut
    Citation Envoyé par andrebernard Voir le message
    Tu es vraiment un ange DarkVader.
    .../...
    Noir
    Citation Envoyé par andrebernard Voir le message
    .../...
    Pour la partie PB, y'a pas de probleme, je la gere.
    Et si ça t'interesse, et si je le peux, je pourrais t'expliquer ce que j'ai compris..../...
    C'est sur le forum PB (French)
    Citation Envoyé par andrebernard Voir le message
    .../...
    VB et PB ensemble c'est de la balle.....car ils reunissent a eux deux tout ce qui peut se faire dans la prog.
    VB pour le COM, la POO et PB pour la partie bas niveau, DLL, et fonctions "C"
    .../...
    C'est plus un problème d'affinité que tu décris - Chaque langage a ses spécificités.

    VB a été conçu pour être le champion de COM et en conséquence, il permet, tout en étant l'un des langages les plus abordable par le 1er péquin venu,
    d'écrire du code très rapidement (voir également VBA/VBS)
    Citation Envoyé par andrebernard Voir le message
    .../...
    En fin de compte, un mec qui maitrise les deux, peut presque avoir la puissance du C, sans jamais avoir a apprendre la dure syntaxe du C
    La preuve c'est que nombreux sont les programmeurs C et Assembleurs qui l'utilisent, c'est donc un gage de puissance et de fiabilité
    Ils disent que lorsqu'il ont besoin de creer un truc rapide, point n'est besoin de sortir la grosse artillerie, car PB sait tres bien se defendre au niveau de la rapidité, car il compile directement en ASM.
    Et en plus....tu peux incorporer au milieu du basic de l'ASM directement, alors imagine la puissance

    PB accede tres facilement a la mémoire, créé des DLL et des EXE portables sur une clef USB sans aucun runtime ni dependances.

    J'ai deja compris pas mal de choses sur les pointeurs, et au pire, j'ai quelques copains qui pouront m'eclairer sur des points precis.

    Ce qui me manque, c'est ta connaissance sur le VB6
    Car presque plus personne ne l'a installé sur sa machine, sauf VBA bien sur.
    Maintenant les gens au pire utilisent DOT.NET express puisqu'il est gratuit

    En fait c'est toi qui possede le savoir le plus compliqué, car "GATINOUS" il a drolement tarabiscoté le VB6 pour qu'il soit soit disant plus simple pour l'utilisateur.
    Personne ne comprend, meme les programmeur C, comment il a tordu son truc.
    En fin de compte le C, parait tres compliqué dans la syntaxe, mais il demeure tres simple dans l'utilisation des pointeurs, des DLL, une fois que l'on a compris ce qu'est un pointeur etc....

    Alors que VB avec ces histoire de BYVAL, STRPTR, BSTR, UNICODE etc...
    J'ai usé plusieurs programmeur qui sont des caids du C, pour qu'a la fin ils abandonnent en me disant de creer une DLL en COM se sera plus simple, tellement ils en avaient marre de se tirer les cheveux sur tout ce "bordel"

    Bilou, il a tout fait pour que le VB ne soit pas bas niveau, caché des fonctions (Varptr, StrPtr), supprimé d'autres comme les PEEK et POKE.
    Il a aussi obligé a utiliser SES DLL activex à la difference des autres langages qui savent creer des DLL comme toutes les autres.
    Certe, il y plusieurs standard d'appel des DLL STDCALL et d'autres, mais PB les gere, et je pense que les langages creant des DLL standard aussi.

    Ce qui m'ennerve dans VB6, c'est toutes ces restrictions qui on été voulues par "CROSOFT" et qui du coups font de VB6 un "sous langage"
    Moi, j'aimerais essayer de retablir la justice
    Et permettre a VB6 de jouer dans la cour des grands et de savoir parler le standard quand il est besoin, et le BSTR/UNICODE quand il parle a sa famille
    Ce qui énerve, ... c'est souvent par méconnaissance.
    Par exemple, Il est également possible d'injecter du code asm dans VB
    de même que si Peek et Poke ne sont que des copymem sépécifiques,
    ils ont leur équivalent sous VB (getmemX/pumemX).
    Pour les fonctions cachées, il suffit de parcourir l'explorateur d'objects pour les découvrir avec l'option Afficher les fonctions cachées
    et si elles ne sont pas documentées dans la msdn, le web corrige cet aspect.
    Pour la spécificité des chaines BSTR c'est une spécificité COM
    Voir http://msdn.microsoft.com/en-us/library/ms221069.aspx

    Je compléterais ce soir.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 309
    Par défaut
    C'est sur le forum PB (French)
    Oui le forum français est sympa, et on apprend pas mal de chose.
    Les membres sont une famille et on rigole bien tout en apprenant.

    Mais si tu veux apprendre le PB, et rencontrer les CAIDS de ce langage qui en fait son des CAIDS de C et ASM, faut aller sur l'officiel c'est a dire l'anglais.
    Les tres bons français ont malheureusement quitté le forum et s'en sont allé vers d'autres cieux....
    Je ne sait pas pourquoi, souvent parce que ce langage est tellement simple a utiliser, que quand on est un maitre, en quelques mois on le maitrise, donc pas besoin d'aller demander quelque chose, puisqu'on connait la reponse
    Ceux qui sont sur le US, sont la surtout pour aider les autres comme tu le fait
    Ils ne posent quasi jamais de questions, mais ils sont toujours la, tous les jours, les nuits, des fois je me demande si c'est pas des machines

    Deja on etait moins nombreux au depart sur le FR, normal la france contre le monde entier, y'a pas photo...
    Mais en plus les 2/3 qui etait vraiment des maitres s'en sont parti....

    Il doit en rester 1/2 de temps en temps qui passent, mais c'est de plus en plsu mort au niveau apprentissage.

    Alors j'ai été obligé de me mettre a l'anglais depuis 30 ans que j'avais appris.
    C'est pas facile de baragouiner l'anglais et de rajouter donc cette diffuculté a la programmation qui est deja bien assez compliquée comme ça

    Mais bon....c'est comme tu veux, moi je proposais ça pour faire un echange

  6. #6
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 131
    Par défaut
    Citation Envoyé par andrebernard Voir le message
    .../...
    Mais bon....c'est comme tu veux, moi je proposais ça pour faire un echange
    J'ai une piste (Pseudotype pour les tableaux de chaines) A suivre ...
    J'ai vu également qu'il fallait d'abord déclarer les tableaux dans AttachProcess.


    Mais revenons à nos moutons.
    Par l'exemple, c'est plus clair :
    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
        Dim s As String, ptrS As Long, l As Long, n As Long, tmp As Long, b() As Byte, x As Long
     
        'soit une chaine de texte
        s = "my string etc"
     
        'varptr(s) pointe vers strptr(s) le pointeur de chaine
        CopyMemory tmp, ByVal VarPtr(s), 4
        ptrS = StrPtr(s)
            Debug.Print "Pointeur de chaine :", "StrPtr:"; ptrS, "by Varptr: "; tmp
     
     
        'le nombre de caractères dans la chaine est décrite à l'offset -4
        'strptr(s) - 4 => lenstr
     
        CopyMemory l, ByVal (StrPtr(s) - 4), 4
            Debug.Print "Longueur de chaine (unicode) => " & "StrPtr-4 : "; l, "lenB: "; LenB(s)
     
     
        'Le nb de caractères est également récupérable avec
        n = lstrlenW(ptrS)  'kernel32
        'ou SysStringByteLen (oleaut32)
        Debug.Print "Nb de caractères : lstrlenW: "; n, , "eq SysStringByteLen(s): "; SysStringByteLen(s), "Len(s):"; Len(s), "LenB(s) \ 2: "; LenB(s) \ 2
     
     
        ' Chaine unicode : lenB= l =   2*n
        ReDim b(l)   ' taille réelle en mémoire
        CopyMemory b(0), ByVal StrPtr(s), l
     
        Debug.Print "La chaine reconstituée depuis son pointeur :", b()

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [JSF] comment fonctionne <h:message> ?
    Par anitshka dans le forum JSF
    Réponses: 5
    Dernier message: 29/06/2005, 17h36
  2. Comment fonctionne TXmlDocumment ????
    Par almisuifre dans le forum C++Builder
    Réponses: 8
    Dernier message: 18/02/2005, 12h54
  3. comment fonctionne une interface graphique???
    Par elekis dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 27/10/2004, 23h10
  4. Comment fonctionne le ClassExplorer ?
    Par borisd dans le forum C++Builder
    Réponses: 7
    Dernier message: 30/09/2004, 17h44
  5. Comment fonctionne le CVS ?
    Par mathieu dans le forum CVS
    Réponses: 6
    Dernier message: 23/03/2004, 11h26

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