Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 如何将字符串写入文件的资源_Vb.net_File_Resources - Fatal编程技术网

Vb.net 如何将字符串写入文件的资源

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

如何使用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
导入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文件。