@msdn=http://search.microsoft.com/search/results.aspx?qu=$$$ @pinvoke=http://pinvoke.net/$$$.htm Summary: The LockResource API !!!!C# Signature: [DllImport("kernel32.dll")] static extern IntPtr LockResource(IntPtr hResData); !!!!VB.NET Signature: <DllImport("kernel32.dll")> _ Private Shared Function LockResource(hResData As IntPtr) As IntPtr End Function !!!!User-Defined Types: None. !!!!Notes: does not call SetLastError, according to MSDN. !!!!Tips & Tricks: this function returnes a pointer to the resource. you can use Marshal.Copy() to copy the data from the pointer to a managed array. !!!!Sample Code: 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); !!!!Sample Code: [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); } !!!!Alternative Managed API: Do you know one? Please contribute it! Documentation: LockResource@msdn on MSDN
Edit kernel32.LockReso...
You do not have permission to change this page. If you feel this is in error, please send feedback with the contact link on the main page.