2013-10-15 88 views
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 
+0

你试图写入的文件的性质是什么? DLL,托管EXE,Win32 EXE等? – Plutonix

+0

只是一个本机EXE文件。 –

回答

0

你可以这样做很容易地转换字符串转换成字节数组:

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

并以CONVER回:

System.Text.Encoding.UTF8.GetString 

或者,你可以进入的一些很深入的谈话在这里编码:net-string-to-byte-array-c-sharp