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

Или, вы можете попасть в какой-то глубокий разговор о encodinging здесь: net-string-to-byte-array-c-sharp

Смежные вопросы