2013-10-15 31 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