Bonjour j'ai fais une applic avec la version de test de visual studio :
Mon prog
J'ai un souci quand je refait ce projet sous vb-express, ca ne marche plus.
je vous montre le bout de mon code ou ce situe mon problème:
Dim Buff As Object = My.Computer.Registry.GetValue(KeyPath, ValueName, 0)
If Buff Is Nothing Then Return "N/A"
Dim temp As String = ""
For l As Integer = LBound(Buff) To UBound(Buff)
temp = temp & " " & Hex(Buff(l))
Next
J'ai une erreur au debugage qui me dit : [ Impossible d'effectuer un cast d'un objet de type 'System.Int32' en type 'System.Array' ] dans la version express de vb , alors que sur vb studio aucun souci .
J'aimerai que l'on m'explique, que l'on me donne plus d'information au niveau des "CPU", de la pile, pour essayer de résoudre mon probleme, car je ne dispose plus de vb-studio mais seulement vb express avec lequel je travail tous les jours. Merci de votre aide.
je précise un point:ce qui m'intrigue
1- je dispose de mon fichier de la solution en visual studio 2- sur ce fichier je fais clique droit ouvrir avec vb express
3- mon projet s'ouvre, puis je lance le debug
4- le programme fonctionne quand je debug dans vb Express
5- Je créer un nouveau projet et je recopie à l'identique le code de mon programme
6- je debug , et une erreur se produit[ Impossible d'effectuer un cast d'un objet de type 'System.Int32' en type 'System.Array' ]
7-J'ai recherché dans les fihiers créés par vb pour voir si je ne trouvai pas une ligne de code interressante, mais je ne vois vraiment pas.
La différence entre X86, X64 et AnyCPU, c'est :
- X64, cible spécifiquement les 64 bits
- X86, cible les 32 bits, parfois indispensable pour accéder à certaines DLL ou ActiveX
- AnyCPU, pas de cible spécifique, mais, c'est la VM .NET qui choisira selon la machine d’exécution.
---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualVasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list ---
Mon site
Lis le point 3 de ma signature.
Si tu as l'erreur sur :
LBound(Buff)
C'est que Buff est un Entier (Object peut tout contenir), regardes la valeur avec un espion.
---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualVasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list ---
Mon site
Je suis en train d'étudier mon problème, j'ai fait tout ce qui est préciser dans le point 3 de ta description, sans succès.
1-J'ai activer Option Explicit, qui est activé par défault d'ailleur.
2-J'ai bien activé Option Strict, qui lui était sur off
3-J'ai retiré l'espace de nom : Microsoft.VisualBasic
Dim lBound() As Int32
Dim UBound() As Int32
Dim Hex() As Object
Dim temp As String = ""
Dim Buff As Object = CType(My.Computer.Registry.GetValue(KeyPath, ValueName, 0), Object())
If Buff Is Nothing Then Return "N/A"
For l As Integer = LBound(Buff) To UBound(Buff)
temp = temp & " " & Hex(Buff(l))
Next
je dois mal m'y prendre pour déclarer Buff , je suis en option explicite on et option strict on et j'ai une erreur sur Buff.
Une petite question aussi , pourquoi lorsque j'ouvre mon fichier vb studio et que je debug dans l'express ca marche, sans option strict d'activé? alors que le programme créé entièrement sous express ne marche pas?
J'ai trouvée ca comme info :'Build the application witt Target x64 CPU or Any CPU
voici ce que je devrai faire mais vb express n'as pas le même menu dans "Options avancées du compilateur", comment faire sous express pour résoudre ce problème , et j'ailerai vraiment comprendre le pourquoi du comment... merci
Est - ce que je t'ai demandé de chercher à ma place ? c'est pas croyable , en fait sur ce si tu n'as pas de connaissances tu passes direct pour un boulet ! franchement les gars ...mince vous avez commencez comment vous ?
Écoute bien petit morveux. J'ai suivi un cours de programmation en Fortran avec des cartes perforées comme support d'entrée.
À partir de ce cours de FORTRAN, j'ai appris par moi-même Le BASIC, QuickBASIC, VisualBASIC, VisualBASIC édition applications, Visual BASIC.net
Je l'ai appris en regardant dans l'aide de ces programmes, en lisant des livres et des articles.
J'ai appris à chercher des exemples sur les multiples sites consacrés à la programmation et surtout sur MSDN.
J'ai appris par efforts essais et erreurs et pas comme beaucoup trop de jeunes d'aujourd'hui qui veulent des solutions toutes cuites dans le bec.
Si au lieu de venir brailler ici, tu avais juste regardé dans les menus et dans l'aide de VB; cela ferait une mèche que tu l'aurais trouvé ta réponse.
Et puis, si tu avais cherché dans l'aide, tu aurais trouvé que cette ligne-là doit être vérifiée:
For l As Integer = LBound(Buff) To UBound(Buff)
Parce que dans VB.net tous les tableaux et collections partent avec l'indice 0 (zéro) et que LBound donne toujours 0. Donc, tu as probablement intérêt à vérifier s'il faut mettre cela à la place
For l As Integer = 0 To UBound(Buff)- 1
Le corollaire est que ton plantage est peut-être plus dû à ta gestion des indices qu'à ta version Express ou pas Express.
Merci de vous calmer.
L'exception :
Impossible d'effectuer un cast d'un objet de type 'System.Int32' en type 'System.Array'
et la ligne :
For l As Integer = LBound(Buff) To UBound(Buff)
ça me semble clair, Buff est un entier et pas un tableau.
Verifie le type de Buff avant de le traiter comme un tableau (Type Of).
De plus :
3-J'ai retiré l'espace de nom : Microsoft.VisualBasic
Indiquerais que tu as remplacé LBound et Ubound, mais par quoi ?
Bonjour henry, oui je me calme sans problème , le souci c'est que l'on m'as manqué de respect, enfin désolé.
En tout cas merci de t'interresser encore une fois à mon cas.
J'avais bien compris le principe de l'erreur , mais j'aurai aimé avoir plus d'informations.
Pourquoi , en activant tout simplement la plateforme "any cpu" mon bout de code marche et effectue tout de même la conversion ?C'est surtout ca qui m'interresse...j'aimerai plus de détails sur la génération any cpu.
merci
Merci Merci !!! Une réponse claire, nette et précise !!!
Je n'ai pas dut chercher comme il faut.
Bravo Henry pour ton savoir, tes réponses et ton RESPECT ! Encore merci.
Je me fais vite oublier.
bonne journée.
(Si tu as la possibilité de supprimer mes anciens "coms" agressifs, ca serai gentil, on est la pour apprendre et non pas pour s'en mettre plein les dents. désolé si je te fais perdre un peu de temps pour la suppression.)