[DllImport("kernel32.dll")]
static extern IntPtr LockResource(IntPtr hResData);
<DllImport("kernel32.dll")> _
Private Shared Function LockResource(hResData As IntPtr) As IntPtr
End Function
None.
does not call SetLastError, according to MSDN.
this function returnes a pointer to the resource. you can use Marshal.Copy() to copy the data from the pointer to a managed array.
pResource = LockResource(hResource);
if (hResource.ToInt32() == 0) {
throw new ApplicationException("could not get pointer to file");
}
fileSizeComp = ((Module)mFiles[index]).CompSize;
fileSizeUnComp = ((Module)mFiles[index]).Size;
byte[] fileBuffComp = new byte[fileSizeComp + mOffset];//original buffer
byte[] fileBuffUnComp = new byte[fileSizeUnComp + 1]; //uncompressed file
//copy to managed memory:
Marshal.Copy(pResource, fileBuffComp, 0, fileSizeComp + mOffset);
[DllImport("Kernel32.dll", EntryPoint = "FindResourceW", SetLastError = true, CharSet = CharSet.Unicode)]
private static extern IntPtr FindResource(IntPtr hModule, string pName, string pType);
[DllImport("Kernel32.dll", EntryPoint = "SizeofResource", SetLastError = true)]
private static extern uint SizeofResource(IntPtr hModule, IntPtr hResource);
[DllImport("Kernel32.dll", EntryPoint = "LoadResource", SetLastError = true)]
private static extern IntPtr LoadResource(IntPtr hModule, IntPtr hResource);
[DllImport("Kernel32.dll", EntryPoint = "LockResource")]
private static extern IntPtr LockResource(IntPtr hGlobal);
internal static int TestFindResource()
{
IntPtr resH1 = FindResource(IntPtr.Zero, "RES_CUSTOMIZE", "CUSTOM");
if (IntPtr.Zero == resH1)
{
throw new System.ComponentModel.Win32Exception();
}
IntPtr resH2 = LoadResource(IntPtr.Zero, resH1);
if (IntPtr.Zero == resH2)
{
throw new System.ComponentModel.Win32Exception();
}
IntPtr resH3 = LockResource(resH2);
if (IntPtr.Zero == resH3)
{
throw new Exception("Lock failed");
}
uint resSize = SizeofResource(IntPtr.Zero, resH1);
byte[] y = new byte[resSize];
Marshal.Copy(resH3, y, 0, (int)resSize);
}
Do you know one? Please contribute it!