0

如何使用 Visual Basic .NET (2010) 将字符串资源写入文件?

这是一种将字节数组写入资源的方法,但这不是我想要的。我想写一个字符串资源。

Imports System.Runtime.InteropServices
Module ResourceWriter
Private Function ToPtr(ByVal data As Object) As IntPtr
    Dim h As GCHandle = GCHandle.Alloc(data, GCHandleType.Pinned)
    Dim ptr As IntPtr
    Try
        ptr = h.AddrOfPinnedObject()
    Finally
        h.Free()
    End Try
    Return ptr

End Function

<DllImport("kernel32.dll", SetLastError:=True)> _
Private Function UpdateResource(ByVal hUpdate As IntPtr, ByVal lpType As String, ByVal lpName As String, ByVal wLanguage As UShort, ByVal lpData As IntPtr, ByVal cbData As UInteger) As Boolean
End Function
<DllImport("kernel32.dll", SetLastError:=True)> _
Private Function BeginUpdateResource(ByVal pFileName As String, <MarshalAs(UnmanagedType.Bool)> ByVal bDeleteExistingResources As Boolean) As IntPtr
End Function
<DllImport("kernel32.dll", SetLastError:=True)> _
Private Function EndUpdateResource(ByVal hUpdate As IntPtr, ByVal fDiscard As Boolean) As Boolean
End Function

Public Function WriteResource(ByVal filename As String, ByVal bytes As Byte()) As Boolean

    Try
        Dim handle As IntPtr = BeginUpdateResource(filename, False)
        Dim file1 As Byte() = bytes
        Dim fileptr As IntPtr = ToPtr(file1)
        Dim res As Boolean = UpdateResource(handle, "RT_RCDATA", "0", 0, fileptr, Convert.ToUInt32(file1.Length))
        EndUpdateResource(handle, False)
    Catch ex As Exception
        Return False
    End Try
    Return True

End Function
End Module
4

1 回答 1

0

您可以通过执行以下操作轻松地将字符串转换为字节数组:

System.Text.Encoding.UTF8.GetBytes(Str)

并转换回来:

System.Text.Encoding.UTF8.GetString

或者,您可以在这里进行一些关于编码的深入对话:net-string-to-byte-array-c-sharp

于 2013-10-15T14:20:56.753 回答