/// <summary> /// 将指定字符串数据映射到内存地址,然后返回这个地址 /// </summary> /// <param name="szTextData">指定字符串数据</param> /// <returns>IntPtr</returns> public static IntPtr StringToPtr(string szTextData) { if (GlobalMethods.Misc.IsEmptyString(szTextData)) { return(IntPtr.Zero); } try { byte[] byteTextData = Convert.GetDefaultEncoding().GetBytes(szTextData); IntPtr hTextData = System.Runtime.InteropServices.Marshal.AllocHGlobal(byteTextData.Length); System.Runtime.InteropServices.Marshal.Copy(byteTextData, 0, hTextData, byteTextData.Length); NativeStructs.COPYDATASTRUCT copyDataStruct = new NativeStructs.COPYDATASTRUCT(); copyDataStruct.dwData = IntPtr.Zero; copyDataStruct.lpData = hTextData; copyDataStruct.cbData = byteTextData.Length; hTextData = System.Runtime.InteropServices.Marshal.AllocHGlobal(System.Runtime.InteropServices.Marshal.SizeOf(copyDataStruct)); System.Runtime.InteropServices.Marshal.StructureToPtr(copyDataStruct, hTextData, true); return(hTextData); } catch (Exception ex) { LogManager.Instance.WriteLog("GlobalMethods.StringToPtr", new string[] { "szTextData" }, new object[] { szTextData }, ex); return(IntPtr.Zero); } }
/// <summary> /// 将指针指向的地址上的数据转换为字符串 /// </summary> /// <param name="hTextData">指针指向的地址</param> /// <returns>string</returns> public static string PtrToString(IntPtr hTextData) { if (hTextData == IntPtr.Zero) { return(null); } try { NativeStructs.COPYDATASTRUCT stTextData = (NativeStructs.COPYDATASTRUCT) System.Runtime.InteropServices.Marshal.PtrToStructure(hTextData, typeof(NativeStructs.COPYDATASTRUCT)); byte[] byteTextData = new byte[stTextData.cbData]; System.Runtime.InteropServices.Marshal.Copy(stTextData.lpData, byteTextData, 0, byteTextData.Length); return(Convert.GetDefaultEncoding().GetString(byteTextData)); } catch (Exception ex) { LogManager.Instance.WriteLog("GlobalMethods.PtrToString", new string[] { "hTextData" }, new object[] { hTextData }, ex); return(null); } }
/// <summary> /// ��ָ���ַ�������ӳ�䵽�ڴ��ַ,Ȼ�������ַ /// </summary> /// <param name="szTextData">ָ���ַ�������</param> /// <returns>IntPtr</returns> public static IntPtr StringToPtr(string szTextData) { if (GlobalMethods.Misc.IsEmptyString(szTextData)) return IntPtr.Zero; try { byte[] byteTextData = Convert.GetDefaultEncoding().GetBytes(szTextData); IntPtr hTextData = System.Runtime.InteropServices.Marshal.AllocHGlobal(byteTextData.Length); System.Runtime.InteropServices.Marshal.Copy(byteTextData, 0, hTextData, byteTextData.Length); NativeStructs.COPYDATASTRUCT copyDataStruct = new NativeStructs.COPYDATASTRUCT(); copyDataStruct.dwData = IntPtr.Zero; copyDataStruct.lpData = hTextData; copyDataStruct.cbData = byteTextData.Length; hTextData = System.Runtime.InteropServices.Marshal.AllocHGlobal(System.Runtime.InteropServices.Marshal.SizeOf(copyDataStruct)); System.Runtime.InteropServices.Marshal.StructureToPtr(copyDataStruct, hTextData, true); return hTextData; } catch (Exception ex) { LogManager.Instance.WriteLog("GlobalMethods.StringToPtr", new string[] { "szTextData" }, new object[] { szTextData }, ex); return IntPtr.Zero; } }