【问题标题】:How to return a byte array as a variant in vb6如何在vb6中将字节数组作为变体返回
【发布时间】:2013-04-12 15:43:38
【问题描述】:

我一直在试图弄清楚为什么下面的函数在返回时会抛出“类型不匹配”的错误。根据我对 VB6 的了解,这应该没有任何问题,但显然没有。谁能看到我在这里做错了什么并让我知道如何解决它?提前致谢。

Private Function GetByteArray(source As Variant, index As Integer, length As Integer) As     Variant
  Dim buff() As Byte
  ReDim buff(0 To length - 1)
  Dim i As Integer
  For i = 0 To length - 1
    buff(i) = CByte(source(index + i))
  Next i
  GetByteArray = buff
End Function

【问题讨论】:

  • 函数正在尝试返回一个变体,并且您已将 buff 调暗为一个字节。似乎您想从该函数返回一个字节,否则为什么要转换它?除非我误解了这个问题。
  • 对,我真正想要的是一个字节数组。如果我想要一个字节,那将非常简单。我基本上遵循support.microsoft.com/kb/317030 中提供的示例。当然,我的来源是一个包含字节数组而不是字符串的 Variant。
  • 你如何调用你的函数?具体来说,您传递的source 是什么?究竟是在哪一行得到Type Mismatch 错误?
  • 具体来说,我传入了一个 Variant,其中包含一个从 3rd 方库返回的字节数组。函数返回后立即引发类型不匹配错误。这就是为什么我认为该功能有问题。然而,看起来真正的问题是我对函数结果所做的事情。

标签: vb6 bytearray variant


【解决方案1】:

事实证明,问题与我发布的函数无关,而是与我对结果所做的事情有关。我正在使用该方法获取双精度的字节,然后使用 CDbl 获取双精度值。这是真正发生错误的地方。

我应该这样做的方法是使用以下代码:

CopyMemory rfcTest.rfcFloat, GetByteArray(buff, 0, 8), Len(rfcTest.rfcFloat)

请注意,为了使用它,您还必须像这样声明 CopyMemoryMethod:

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSrc As Any, ByVal ByteLen As Long)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-20
    • 2015-05-02
    • 2014-02-21
    • 1970-01-01
    • 2019-03-09
    • 2011-03-07
    相关资源
    最近更新 更多