1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    juillet 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : juillet 2017
    Messages : 2
    Points : 1
    Points
    1

    Par défaut De VB6 à VB.NET : Impossible d'effectuer un cast d'un objet de type 'System.Int32[*]' en type 'System.Int32'

    Bonjour,
    j'avais écrit sous VB6 un client OPC qui fonctionnait plutôt bien.
    Devant y ajouter des fonctions, on m'a demander de le reprendre en VB.NET
    Ce programme fait appel à une DLL (OPCDAAuto.DLL) fournie par la fondation OPC.

    en programmation VB6,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Dim oServer As OPCAutomation.OPCServer
    Dim oTagGroup As OPCAutomation.OPCGroup
    Dim oTags As OPCAutomation.OPCItems
     
    Dim sOpcTag(1) As String
    Dim LTagErrors(1) As Long
     
    Set oServer = New OPCServer
    Set oTagGroup = oServer.OPCGroup
    Set oTags = oTagGroup.OPCItems
     
    sOpcTag(1) = "Item1"
    oTags.Validate 1, sOpcTag(), LTagErrors()
    ce code fonctionne bien. je veux dire par là que la fonction OPCAutomation.OPCItems.Validate renvoie dans LTagErrors(1) une valeur non nulle si Item1 n'existe pas

    Maintenant je passe en VB.NET

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Dim oServer As OPCAutomation.OPCServer
    Dim oTagGroup As OPCAutomation.OPCGroup
    Dim oTags As OPCAutomation.OPCItems
     
    Dim sOpcTag(1) As String
    Dim LTagErrors(1) As Long
     
    Set oServer = New OPCServer
    Set oTagGroup = oServer.OPCGroup
    Set oTags = oTagGroup.OPCItems
     
    sOpcTag(1) = "Item1"
    oTags.Validate (2, sOpcTag, LTagErrors)
    maintenat j'ai l'erreur suivante :
    Impossible d'effectuer un cast d'un objet de type 'System.Int32[*]' en type 'System.Int32[]'

    la definition de la fonction Validate est la suivante :
    -avec VB6:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sub Validate(NumItems As Long, ItemIDs() As String, Errors() As Long, [RequestedDataTypes], [AccessPaths])
    -avec VB.NET
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sub Validate(NumItems As Integer, ByRef ItemIDs As Array, ByRef Errors As Array, Optional RequestedDataTypes As Object = Nothing, Optional AccessPaths As Object = Nothing)
    j'ai beau tourner le truc dans tout les sens je ne trouve pas.
    Merci de votre aide.

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    octobre 2013
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2013
    Messages : 1 252
    Points : 2 704
    Points
    2 704

    Par défaut

    Déjà, les deux signatures de Validate sont différentes : tu as changé les types de ItemIDs (String() -> Array) et Errors(Long() -> Array)

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    juillet 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : juillet 2017
    Messages : 2
    Points : 1
    Points
    1

    Par défaut

    Bonjour,
    Déjà merci d'avoir regardé.

    En fait non, je t'assure je n'ai rien changé.
    en VB6 dans projet->references, je sélectionne OPCDAAuto.DLL et dans l'explorateur d'objet j'ai en definition de Validate cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sub Validate(NumItems As Long, ItemIDs() As String, Errors() As Long, [RequestedDataTypes], [AccessPaths])
    et en VB.NET je sélectionne la meme DLL et j'ai cela quand je fait aperçu de la definition:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sub Validate(NumItems As Integer, ByRef ItemIDs As Array, ByRef Errors As Array, Optional RequestedDataTypes As Object = Nothing, Optional AccessPaths As Object = Nothing)

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/10/2016, 09h48
  2. Réponses: 4
    Dernier message: 10/05/2011, 11h55
  3. Réponses: 7
    Dernier message: 26/04/2011, 18h00
  4. Réponses: 0
    Dernier message: 13/03/2010, 10h25
  5. Réponses: 2
    Dernier message: 06/03/2007, 19h38

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