【问题标题】:VB6 to VB.NET CopyMemoryVB6 到 VB.NET CopyMemory
【发布时间】:2017-12-20 05:42:47
【问题描述】:

大家好,我正在尝试将一点点 VB6 转换为 .NET,但出现以下错误:

Microsoft.VisualBasic.dll 中出现“System.InvalidCastException”类型的未处理异常

附加信息:从字符串“”到类型“整数”的转换无效。

以下 .net 代码卡在 CopyMemory(str_Renamed, ptr, count)

Public Function ptrToStr(ByVal ptr As Integer) As String
Dim count As Integer
Dim str_Renamed As String

    count = lstrlen(ptr)

    If count Then
        str_Renamed = New String(vbNullChar, count)
        CopyMemory(str_Renamed, ptr, count)
        ptrToStr = str_Renamed
    Else
        ptrToStr = ""
    End If
End Function

这些变量的值是:

count       = 4
ptr         = 268978536
str_Renamed = " "

我不知道如何解决这个错误...

【问题讨论】:

  • 这样的东西通常最好留给编组器,例如Marshal.PtrToStringAnsi/Auto()
  • 这可能是代码转换不是一个好习惯的例子。如果您发现原始代码总体上试图完成什么,那么将有一种更好、更简单的 .NET 方法来完成等效操作,而无需任何指针/CopyMemory 的东西。

标签: vb.net vb6 copymemory


【解决方案1】:

问题似乎是您将字符串作为CopyMemory 函数的第一个参数传递。 CopyMemory 函数需要一个指针作为第一个参数,因此代码试图将字符串参数转换为整数。据我所知,指针的唯一有效值是整数值或十六进制值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多