예제 #1
0
파일: Win32.cs 프로젝트: xiaopohou/windy
            /// <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);
                }
            }
예제 #2
0
파일: Win32.cs 프로젝트: xiaopohou/windy
            /// <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);
                }
            }
예제 #3
0
            /// <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;
                }
            }