2010-01-10 10 views
1

J'ai essayé de faire fonctionner le code VB suivant en C# pendant des heures maintenant. Je continue d'obtenir une exception Value does not fall within the expected range. lors de l'appel CreateStroke(). En outre, here est également la documentation de Microsoft avec une version C++.Aidez-moi à convertir le code VB/C++ suivant en C#

Option Explicit 
Dim theInkCollector As InkCollector 

Private Sub Form_Load() 
    Set theInkCollector = New InkCollector 
    theInkCollector.hWnd = Me.hWnd 
    theInkCollector.Enabled = True 

    //Create a set of three points, stored as x1, y1, x2, y2, x3, y3 
    //in an array of six Long elements, starting at index 0. 
    Dim ptStrokePoints(5) As Long 
    ptStrokePoints(0) = 200 
    ptStrokePoints(1) = 200 
    ptStrokePoints(2) = 400 
    ptStrokePoints(3) = 600 
    ptStrokePoints(4) = 900 
    ptStrokePoints(5) = 300 

    //The description value is an unused placeholder. 
    Dim theDescription As Variant 
    Dim theStroke As IInkStrokeDisp 
    Set theStroke = theInkCollector.Ink.CreateStroke(ptStrokePoints, theDescription) 
End Sub 

Voici ce que j'ai:

MSINKAUTLib.InkCollector collector = new MSINKAUTLib.InkCollector(); 
collector.hWnd = (int)(this.Handle); 
collector.Enabled = true; 

long[] pts = new long[6]; 
pts[0] = 200; 
pts[1] = 200; 
pts[2] = 400; 
pts[3] = 600; 
pts[4] = 900; 
pts[5] = 300; 

collector.Ink.CreateStroke(pts, new object()); 
+1

Le premier paramètre de 'CreateStroke' attend' int [] ', pas' long [] '. – Seth

+0

J'ai essayé int [], et il dit toujours "La valeur ne tombe pas dans la fourchette attendue." – Mark

Répondre

2

Cela ressemble à l'erreur suivante de la documentation:

E_INVALIDARG - Type non valide VARIANT (uniquement VT_ARRAY | soutenu VT_I4).

Le type C# long est un entier de 64 bits, vous passez donc un VT_ARRAY | VT_I8 (pas VT_I4).

changer votre déclaration pts:

int[] pts = new int[6]; 

et vous devriez être bon d'aller. (int est le type entier C# 32 bits.)

+0

oui j'ai essayé ça ... pas de chance avec ça = ( – Mark

+0

Hmm, bizarre, je suppose qu'il est vaguement possible que le paramètre réservé soit en cours de validation: est-ce que passer 'null' au lieu de' new object() 'help? Aussi, je suppose qu'en fonction de la façon dont la fonction a été importée, le marshalling pourrait être faux, bien que dans ce cas je m'attendrais à une erreur différente.Pourriez-vous poster la signature de la méthode tlbimp'ed, y compris les attributs MarshalAs? ArgumentException right – itowlson

+0

Ce n'est pas une ArgumentException, et ne pas la mettre à null est la première chose que j'ai essayé ... Je ne comprends vraiment pas pourquoi elle se plaint.J'ai le sentiment que c'est parce que la description doit être valide – Mark