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

Développement Windows Discussion :

[C#]Type Mismatch lors de l'utilisation d'un Ocx


Sujet :

Développement Windows

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 57
    Par défaut [C#]Type Mismatch lors de l'utilisation d'un Ocx
    Bonjour à tous, je ne savais pas vraiment où poster car,c'est la première fois que j'utilise un Ocx dans l'un de mes codes.

    De ce fait, je rencontre un problème lors de l'uilisation de celui-ci et j'espère que vous pourrez m'aider .

    Alors, voici mon problème: mon Ocx contient une méthode dont la signature est la suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int EndTransaction(int lHandle, ref object lpsaryDnmCount, ref int lpMachineState)
    Donc moi, crédule comme je suis, ni une ni deux je tape:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int enTransactionState = 0;
    object endTransaction = new int[96];
     
    int result = myOcxObject.EndTransaction(_handle, ref endTransaction, ref enTransactionState);
    Et là, lors de l'utilisation, j'obtiens une Exception: Type Mismatch.
    Par chance, j'ai un exemple d'utilisation de cet Ocx en VB6 qui marche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Dim ret As Integer
    Dim state As Integer
    Dim ArrayCount As Object
    Dim ArrayL(96) As Integer
     
    ArrayCount = VB6.CopyArray(ArrayL)
     
    ret = CommPoint1.EndTransaction(ComID, ArrayCount, state)
    C'est cool, mais moi je dois faire ça en C# et je ne sais pas traduire du VB en c#

    Si quelqu'un pouvait m'éclairer sur ce problème, cela me serait d'une grande aide.

    Merci d'avance de votre aide

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Bonjour

    Difficile à dire à première vue, mais si je ne m'abuse(ce qui n'aurait rien d'étonnant vu l'antiquité conséquente de la techno), l'Integer du VB6 c'est l'équivalent du short en C# pas du int (l'équivalent VB6 du int de C# c'est le Long non ?)

    Tu as essayé de remplacer ta déclaration de tableau int[96] par short[96] ?

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 57
    Par défaut
    Je viens de tester, mais l'erreur persiste .

    Voici la documentation fournit avec l'oCx, concernant cette méthode, si ça peut aider

    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
     
     
    EndTransaction method
     
    [description]
     End the transaction.
     
    [syntax]
        LONG  EndTransaction(
     LONG lHandle, VARIANT* psaryDenomiCount, LONG* lpMachineState )
     
    [Parameters]
        [IN] LONG lHandle
            Device Handle returned from OpenDevice call
        [OUT] VARIANT* lpsaryDenomiCount
        LONG lCount[96] : 
     
        [OUT] LONG* lpMachineState
     
    [Return Value]
             0-This method was successful
    -1 invalid handle.
    -2 Failed to improper machine state
    -3 Communication Error

  4. #4
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut ocx type mismatch
    bonjour
    ton probleme ne vient pas de Long=> Int en C# ou Integer en VB.Net
    Mais l'erreur vient de l'abus du mot cle "ref en C#" .Depuis quand mets-on ref devant un tableau dans un appel?.Tu as simplement passe l'adresse de l'adresse du tableau.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int enTransactionState = 0;
    object endTransaction = new int[96];
     
    //vire ce "ref" devant le nom du parametre "endTransaction" dans l'appel car un tableau passe en parametre est une adresse ou pointeur.
    int result = myOcxObject.EndTransaction(_handle, endTransaction, ref enTransactionState);
    comme quoi le marshalling des types permet de reviser ses connaissances....
    bon code....

Discussions similaires

  1. [XL-2010] Incompatibilité de type lors de l'utilisation de l'AddIn Aspentech
    Par J.Le_Roy dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 10/05/2015, 18h42
  2. Réponses: 2
    Dernier message: 16/12/2014, 14h03
  3. [XL-2003] Run-time error '13': Type mismatch lors d'une comparaison
    Par FuNKyMIkE dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 22/09/2009, 01h40
  4. [LG]Problème "Type Mismatch"
    Par Aezar dans le forum Langage
    Réponses: 9
    Dernier message: 25/02/2005, 22h50
  5. [LG]Type mismatch
    Par néo333 dans le forum Langage
    Réponses: 6
    Dernier message: 04/11/2003, 22h13

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