当前位置: 首页 > news >正文

如何申请免费域名做网站搜狗快速收录方法

如何申请免费域名做网站,搜狗快速收录方法,做网络竞拍的网站,wordpress 搜索 排除分类前言 如果一个软件比较复杂或者某些情况下需要拆解,可以考试将软件分解成两个或多个进程,但常规的消息传递又不能完全够用,使用消息共享内存,实现图像传递,当然性能这个方面我并没有测试,仅是一种解决思路…

前言

如果一个软件比较复杂或者某些情况下需要拆解,可以考试将软件分解成两个或多个进程,但常规的消息传递又不能完全够用,使用消息+共享内存,实现图像传递,当然性能这个方面我并没有测试,仅是一种解决思路吧。

一、效果展示

1、调用方

2、被调用方

二、实现代码

1、主调打开调用进程

主要是为了拿到Handle,为发送消息函数提供操作句柄。

2、创建共享内存

        /// <summary>/// 创建共享内存/// </summary>/// <returns>0=创建成功;1=创建共享体失败;2=打开失败;3=印射失败; 4=共享内存命名错误</returns>public int CreateMemory(){if (MemSize <= 0) MemSize = 0x00800000;if (ShareName.Length > 0){//创建内存共享体(INVALID_HANDLE_VALUE)m_hSharedMemoryFile = CreateFileMapping(INVALID_HANDLE_VALUE, IntPtr.Zero, (uint)PAGE_READWRITE, 0, (uint)MemSize, ShareName);if (m_hSharedMemoryFile == IntPtr.Zero){m_bAlreadyExist = false;m_bInit = false;MemPtr = IntPtr.Zero;return 1; //创建共享体失败}else{if (GetLastError() == ERROR_ALREADY_EXISTS) //已经创建{m_bAlreadyExist = true;CloseHandle(m_hSharedMemoryFile);m_hSharedMemoryFile = OpenFileMapping(FILE_MAP_ALL_ACCESS, false, ShareName);if (m_hSharedMemoryFile == null){MemPtr = IntPtr.Zero;return 2;//打开共享内存失败}}else                                         //新创建{m_bAlreadyExist = false;}}//创建内存映射m_rwData = MapViewOfFile(m_hSharedMemoryFile, FILE_MAP_ALL_ACCESS, 0, 0, (uint)MemSize);if (m_rwData == IntPtr.Zero){m_bInit = false;CloseHandle(m_hSharedMemoryFile);MemPtr = IntPtr.Zero;return 3; //创建内存映射失败}else{m_bInit = true;MemPtr = m_rwData;}}else{return 4; //参数错误}return 0;     //创建成功}

3、读取本地图像并写图像数据到共享内存中

 MyAlgoProcessNet.HImage hImage = new MyAlgoProcessNet.HImage(fileName);IntPtr prt = hImage.GetImagePointer1(out string type, out imageData.Widht, out imageData.Height);imageData.dataLength = imageData.Widht * imageData.Height;byte[] datas = new byte[imageData.dataLength];Marshal.Copy(prt, datas, 0, imageData.dataLength);int pos = Marshal.SizeOf(imageData);share1.WriteToMemory(imageData);//写共享内存if (share1.WriteBytes(datas, pos + 1) == 0){WriteMsg("share1写入共享内存成功");}else{WriteMsg("share1写入共享内存失败!!");}public int WriteBytes(byte[] datas, int pos = -1){if (IntPtr.Zero == MemPtr){return -1;}if (pos == -1){Marshal.Copy(datas, 0, MemPtr, datas.Length);}else{IntPtr offPtr = IntPtr.Add(MemPtr, pos);Marshal.Copy(datas, 0, offPtr, datas.Length);}return 0;}

4、通知读取数据

private void SendMsg2(string msg)
{// 获取目标进程句柄IntPtr hWnd = process.MainWindowHandle;// 封装消息byte[] sarr = System.Text.Encoding.Default.GetBytes(msg);int len = sarr.Length;COPYDATASTRUCT cds2;cds2.dwData = (IntPtr)0;cds2.cbData = len + 1;cds2.lpData = msg;// 发送消息WriteMsg(msg + " Start");SendMessage(hWnd, WM_COPYDATA, IntPtr.Zero, ref cds2);WriteMsg(msg + " End");
}

5、被调用方关联消息处理函数

        protected override void OnSourceInitialized(EventArgs e){base.OnSourceInitialized(e);HwndSource hwndSource = PresentationSource.FromVisual(this) as HwndSource;if (hwndSource != null){IntPtr handle = hwndSource.Handle;hwndSource.AddHook(new HwndSourceHook(WndProc));}}

6、被调用方处理图像数据

        private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled){if (msg == WM_COPYDATA){WriteInfo(1, "WndProc Start");COPYDATASTRUCT cds = (COPYDATASTRUCT)Marshal.PtrToStructure(lParam,typeof(COPYDATASTRUCT)); // 接收封装的消息string rece = cds.lpData; // 获取消息内容// 自定义行为//  Console.WriteLine(rece);if (rece == "Read"){Task.Run(() =>{//读共享内存// datastruct = (MemoryClass)shareMemory.ReadFromMemory(typeof(MemoryClass));// WriteInfo(1, $"读取数据:{datastruct.bianliang1},{datastruct.bianliang2},{datastruct.bianliang3}");imageData = (ImageData)shareMemory.ReadFromMemory(typeof(ImageData));int ShareSize = Marshal.SizeOf(imageData);byte[] datas = shareMemory.ReadByteFromMemory(imageData.dataLength, ShareSize + 1);HImage hImage = new HImage();using (PinnedObject pinnedObject = new PinnedObject(datas)){hImage.GenImage1("byte", imageData.Widht, imageData.Height, pinnedObject.Pointer);}// hImage.GenImage1(imageData.DataType, imageData.Widht, imageData.Height, imageData.dataPrt);ImgControl.HalconWindow.AttachBackgroundToWindow(hImage);WriteInfo(1, "图像处理完成");});}// Thread.Sleep(2000);WriteInfo(2, rece);if (rece.Equals("Close")){this.Close();}}return hwnd;}

7、共享内存操作

  internal class ShareMemory{[DllImport("user32.dll", CharSet = CharSet.Auto)]public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, int wParam, IntPtr lParam);[DllImport("Kernel32.dll", CharSet = CharSet.Auto)]public static extern IntPtr CreateFileMapping(int hFile, IntPtr lpAttributes, uint flProtect, uint dwMaxSizeHi, uint dwMaxSizeLow, string lpName);[DllImport("Kernel32.dll", CharSet = CharSet.Auto)]public static extern IntPtr OpenFileMapping(int dwDesiredAccess, [MarshalAs(UnmanagedType.Bool)] bool bInheritHandle, string lpName);[DllImport("Kernel32.dll", CharSet = CharSet.Auto)]public static extern IntPtr MapViewOfFile(IntPtr hFileMapping, uint dwDesiredAccess, uint dwFileOffsetHigh, uint dwFileOffsetLow, uint dwNumberOfBytesToMap);[DllImport("Kernel32.dll", CharSet = CharSet.Auto)]public static extern bool UnmapViewOfFile(IntPtr pvBaseAddress);[DllImport("Kernel32.dll", CharSet = CharSet.Auto)]public static extern bool CloseHandle(IntPtr handle);[DllImport("kernel32", EntryPoint = "GetLastError")]public static extern int GetLastError();private const int INVALID_HANDLE_VALUE = -1;private const int ERROR_ALREADY_EXISTS = 0xB7;//183private const int PAGE_READWRITE = 0x04;private const int FILE_MAP_ALL_ACCESS = 0x0002 | 0x0004;private const int FILE_MAP_READ = 0x0004;private const int FILE_MAP_WRITE = 0x0002;private IntPtr m_hSharedMemoryFile = IntPtr.Zero;private IntPtr m_rwData = IntPtr.Zero;private bool m_bAlreadyExist = false;private bool m_bInit = false;private string ShareName { get; set; } //共享内存的名字private long MemSize { get; set; }//共享内存大小private IntPtr MemPtr { get; set; }//共享内存印射地址/// <summary>/// 共享内存初始化/// </summary>/// <param name="MemName">共享内存名字</param>/// <param name="MemSize">共享内存大小</param>public ShareMemory(string MemName, long Size){ShareName = MemName;MemSize = Size;MemPtr = IntPtr.Zero;m_bInit = false;m_bAlreadyExist = false;m_rwData = IntPtr.Zero;m_hSharedMemoryFile = IntPtr.Zero;}~ShareMemory(){ShareMemoryClose();}/// <summary>/// 创建共享内存/// </summary>/// <returns>0=创建成功;1=创建共享体失败;2=打开失败;3=印射失败; 4=共享内存命名错误</returns>public int CreateMemory(){if (MemSize <= 0) MemSize = 0x00800000;if (ShareName.Length > 0){//创建内存共享体(INVALID_HANDLE_VALUE)m_hSharedMemoryFile = CreateFileMapping(INVALID_HANDLE_VALUE, IntPtr.Zero, (uint)PAGE_READWRITE, 0, (uint)MemSize, ShareName);if (m_hSharedMemoryFile == IntPtr.Zero){m_bAlreadyExist = false;m_bInit = false;MemPtr = IntPtr.Zero;return 1; //创建共享体失败}else{if (GetLastError() == ERROR_ALREADY_EXISTS) //已经创建{m_bAlreadyExist = true;CloseHandle(m_hSharedMemoryFile);m_hSharedMemoryFile = OpenFileMapping(FILE_MAP_ALL_ACCESS, false, ShareName);if (m_hSharedMemoryFile == null){MemPtr = IntPtr.Zero;return 2;//打开共享内存失败}}else                                         //新创建{m_bAlreadyExist = false;}}//创建内存映射m_rwData = MapViewOfFile(m_hSharedMemoryFile, FILE_MAP_ALL_ACCESS, 0, 0, (uint)MemSize);if (m_rwData == IntPtr.Zero){m_bInit = false;CloseHandle(m_hSharedMemoryFile);MemPtr = IntPtr.Zero;return 3; //创建内存映射失败}else{m_bInit = true;MemPtr = m_rwData;}}else{return 4; //参数错误}return 0;     //创建成功}public byte[] ReadByteFromMemory(int dataLength, int pos = -1){if (IntPtr.Zero == MemPtr){return new byte[0];}byte[] datas = new byte[dataLength];if (pos == -1){Marshal.Copy(MemPtr, datas, 0, dataLength);}else{IntPtr offPtr = IntPtr.Add(MemPtr, pos);Marshal.Copy(offPtr, datas, 0, dataLength);}return datas;}/// <summary>/// 读取共享内存并返回到类/// </summary>/// <param name="type">读取的类型</param>/// <returns>读取的数据</returns>public Object ReadFromMemory(Type type){if (IntPtr.Zero == MemPtr){return null;}Object obj = Marshal.PtrToStructure(MemPtr, type);return obj;}/// <summary>/// 读取类并写入共享内存/// </summary>/// <param name="obj">需要读取的类(结构体)</param>/// <returns>返回0表示写入成功,返回-1表示写入失败</returns>public int WriteToMemory(Object obj){if (IntPtr.Zero == MemPtr){return -1;}Marshal.StructureToPtr(obj, MemPtr, false);return 0;}/// <summary>/// 关闭共享内存(解除印射,关闭句柄)/// </summary>public void ShareMemoryClose(){if (m_bInit){UnmapViewOfFile(m_rwData);CloseHandle(m_hSharedMemoryFile);m_bInit = false;}}/// <summary>/// 获取共享内存印射地址/// </summary>/// <returns></returns>public IntPtr GetPtr(){return MemPtr;}/// <summary>/// 获取文件句柄/// </summary>/// <returns></returns>public IntPtr GetFileMapPtr(){return m_hSharedMemoryFile;}/// <summary>/// 获取共享内存大小/// </summary>/// <returns></returns>public long GetSize(){return MemSize;}/// <summary>/// 获取共享内存名字/// </summary>/// <returns></returns>public string GetName(){return ShareName;}}

http://www.yidumall.com/news/82978.html

相关文章:

  • 个人可以建设新闻网站吗网络营销渠道
  • 正规的食品行业网站开发网络推广一个月的收入
  • 一流的句容网站建设安卓系统最好优化软件
  • 一个做网站的团队需要哪些人员优化方案怎么写
  • 做免费推广网站seo算法优化
  • 做我韩国连续剧网站常见网络营销推广方法
  • 政府网站建设服务外包新闻摘抄大全
  • 学校响应式网站建设sem是什么检测分析
  • 有哪些学校的网站做的好优化步骤
  • 做短视频的网站收益日本站外推广网站
  • 小米路由做网站服务器潍坊关键词优化排名
  • 怎样做的英文网站广东优化疫情防控措施
  • 怎么做盗文网站免费注册二级域名的网站
  • PC端网站开发以及设计费用温州seo按天扣费
  • 学 网站开发前端优化网站
  • net创建网站之后怎么做百度账号购买1元40个
  • 凡科做的网站手机版网络营销的培训课程
  • 山西太原网站建设公司哪家好seo狂人
  • 做信息类网站长沙百度关键词搜索
  • 展览公司网站建设方案没干过网络推广能干吗
  • 岳阳市网站建设推广竞价外包
  • 设计师个人网站长尾词排名优化软件
  • 怎么做自己的单机网站深圳网站开发技术
  • 如何建立手机网站统计网站访问量
  • 注册推广软件青岛seo服务公司
  • 济南企业网站建设百度竞价返点开户
  • 网站建设全视频教程下载灰色词seo排名
  • wordpress原生html5播放器网站优化招商
  • 网林时代网站建设深圳快速seo排名优化
  • 网站备案都有哪些计算机培训班有用吗