1

几个小时以来,我一直试图让以下 VB 代码在 C# 中运行。Value does not fall within the expected range.我在 CreateStroke() 调用中不断收到异常。此外,这里也是带有 C++ 版本的 Microsoft 文档。

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

这是我所拥有的:

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());
4

1 回答 1

2

这看起来像文档中的以下错误:

E_INVALIDARG - 无效的 VARIANT 类型(仅支持 VT_ARRAY | VT_I4)。

C#long类型是 64 位整数,因此您传递的是 VT_ARRAY | VT_I8(不是 VT_I4)。

将您的 pts 声明更改为:

int[] pts = new int[6];

你应该很高兴。(int 是 C# 32 位整数类型。)

于 2010-01-10T21:34:48.460 回答