Vb.net 如何将字符串写入文件的资源
如何使用Visual Basic.NET(2010)将字符串资源写入文件 这里有一种将字节数组写入资源的方法,但这不是我想要的。我想写一个字符串资源Vb.net 如何将字符串写入文件的资源,vb.net,file,resources,Vb.net,File,Resources,如何使用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.P
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
导入System.Runtime.InteropServices
模块ResourceWriter
私有函数ToPtr(ByVal数据作为对象)作为IntPtr
尺寸h为GCHandle=GCHandle.Alloc(数据,GCHandleType.pinted)
将ptr调暗为IntPtr
尝试
ptr=h.addrofPindedObject()
最后
h、 免费的
结束尝试
返回ptr
端函数
_
私有函数UpdateResource(ByVal hUpdate作为IntPtr,ByVal lpType作为String,ByVal lpName作为String,ByVal wLanguage作为UShort,ByVal lpData作为IntPtr,ByVal cbData作为UInteger)作为布尔值
端函数
_
私有函数BeginUpdateResource(ByVal pFileName作为字符串,ByVal bDeleteExistingResources作为布尔值)作为IntPtr
端函数
_
私有函数EndUpdateResource(ByVal hUpdate为IntPtr,ByVal fDiscard为Boolean)为Boolean
端函数
公共函数WriteResource(ByVal文件名为字符串,ByVal字节为Byte())为布尔值
尝试
作为IntPtr=BeginUpdateResource的Dim句柄(文件名,False)
Dim file1作为字节()=字节
Dim fileptr作为IntPtr=ToPtr(文件1)
Dim res As Boolean=UpdateResource(句柄,“RT_RCDATA”,“0”,0,fileptr,Convert.ToUInt32(file1.Length))
EndUpdateResource(句柄,False)
特例
返回错误
结束尝试
返回真值
端函数
端模块
通过执行以下操作,您可以轻松地将字符串转换为字节数组:
System.Text.Encoding.UTF8.GetBytes(Str)
然后返回:
System.Text.Encoding.UTF8.GetString
或者,您可以在这里深入讨论编码:您试图写入的文件的性质是什么?DLL、托管EXE、Win32 EXE等?只是一个本机EXE文件。