在定义消息时忘记了用户可定义消息的边界值,在网上一阵疯找后来发现是const int WM_USER = 0x400。接着是SendMessage的lParam类型不能决定(默认是IntPtr),我想发送字符串信息,就将它定为了string型,然后通过重写DefWndProc接收自定义消息。问题出现:(string) message.lParam提示不能转换,然后使用另一种方法:(string)message.GetLParam(typeof(string)),依然有错,提示应该重载string的构造函数建立string的无参构造函数(够狠)。

后来在网上见到一篇文章“C#用WM_COPYDATA消息来实现两个进程之间传递数据”,经提示想到一方法:用结构体封装string字段,然后传结构体就可以了(结构体有自己的无参构造函数--其实原本想自己写个无参构造函数,却发现在vs2005下无法编译通过,提示不能够创建结构体的无参构造函数)。这样就可以在DefWndProc中通过 (tagStructStr)message.GetLParam(typeof(tagStructStr)) 将LParam转换为结构体类型,然后取出它的字符串字段就实现了string的传送了。

事还没完,一次偶尔碰到有人说可以使用Marshal转换string。自己查了下MSDN于是一个传送string的另一方法产生:SendMessage仍然是传string,在DefWndProc中可以用 string str = Marshal.PtrToStringAnsi(m.LParam) 将IntPtr类型的LParam转换为string类型,其实还可以使用 IntPtr p = Marshal.StringToHGlobalAnsi(s) 将string类型转换为IntPtr类型。

进一步深究,发现这其中还有内情:SendMessage使系统API,IntPtr属于非托管类型,而我们在C#中使用的string等类型是托管类型,使用Marshal转换其实真正意义是实现了托管与非托管类型的转换。看来在C#与非托管的C++/C进行交互传递数据时,要少不了Marshal的身影了。

c#中使用消息循环机制发送接收字符串的方法和数据类型转换相关推荐

  1. Android的消息循环机制:Handler

    前言 Android的消息机制主要是指Handler的运行机制,对于大家来说Handler已经是轻车熟路了,可是真的掌握了Handler?本文主要通过几个问题围绕着Handler展开深入并拓展的了解. ...

  2. android 结束if循环_Android Handler 消息循环机制

    前言 一问起Android应用程序的入口,很多人会说是Activity中的onCreate方法,也有人说是ActivityThread中的静态main方法.因为Java虚拟机在运行的时候会自动加载指定 ...

  3. 浏览器中的事件循环机制

    浏览器中的事件循环机制 网上一搜事件循环, 很多文章标题的前面会加上 JavaScript, 但是我觉得事件循环机制跟 JavaScript 没什么关系, JavaScript 只是一门解释型语言, ...

  4. outlook发送接收错误_如何在Outlook 2013中为RSS源创建发送/接收组

    outlook发送接收错误 If you choose to manually update your RSS feeds on demand, there is a way to do this w ...

  5. Java(二)分支循环、数组、字符串、方法

    文章目录 一.分支循环 1.1 分支结构 1.2 循环结构 1.3 跳转语句 1.4 分支循环相关问题 1.4.1 switch是否能作用在byte上,是否能作用在long上,是否能作用在String ...

  6. Python之pandas:特征工程中数据类型(object/category/bool/int32/int64/float64)的简介、数据类型转换四大方法、案例应用之详细攻略

    Python之pandas:特征工程中数据类型(object/category/bool/int32/int64/float64)的简介.数据类型转换四大方法.案例应用之详细攻略 目录 特征工程中数据 ...

  7. android 消息循环机制--looper handler

    Looper类说明   Looper 类用来为一个线程跑一个消息循环. 线程在默认情况下是没有消息循环与之关联的,Thread类在run()方法中的内容执行完之后就退出了,即线程做完自己的工作之后就结 ...

  8. 详谈Windows消息循环机制

    一直对windows消息循环不太清楚,今天做个详细的总结,有说错的地方,请务必指出. 用VS2017新建一个win32 Application的默认代码如下: 这里有几个概念,容易混淆: 1.系统: ...

  9. Windows消息循环机制详细概述

    首先来了解几个基本概念: 消息:在了解什么是消息先来了解什么是事件.事件可分为几种,由输入设备触发的,比如鼠标键盘等等.由窗体控件触发的,比如button控件,file菜单等.还有就是来自Window ...

最新文章

  1. 辞职之后的思考--激励
  2. Java单元测试的意义_单元测试重要意义及方法介绍
  3. 深入了解softmax
  4. [Jarvis OJ - PWN]——[XMAN]level4
  5. 【网络流】植物大战僵尸(P2805)
  6. fis3+vue+pdf.js制作预览PDF文件或其他
  7. 华为鸿蒙系统手机央视,央视再次确认!华为投入巨资打造鸿蒙系统生态:体验媲美七成安卓...
  8. extjs combobox分页加载数据不显示
  9. 咏南WEB APP开发框架
  10. VS2012:出现devenv.sln解决方案保存对话框
  11. 狂神说Redis学习笔记
  12. 一个例子入坑布谷鸟算法(附完整py代码)
  13. 无需注册试用ChatGPT
  14. AI英雄出少年!奔赴星辰,他们正在创造黄金时代
  15. 计算机毕业设计之仿12306火车票购票平台
  16. FPGA图像工程师的六脉神剑——“选扫掌仿习练”
  17. 深入浅出Java23种设计模式(一)
  18. 2018-2-13-win10-uwp-音频
  19. 【Python爬虫案例学习9】python爬取免费优质IP归属地查询接口
  20. Python+Vue计算机毕业设计在线考试系统yyn45(源码+程序+LW+部署)

热门文章

  1. 0-1背包问题(C语言)
  2. ea连接远程oracle报错,PLSQL Developer日期格式如何定制化
  3. Hive中实现有序,有序concat拼接,有序集合,hive方法操作命令,与自带方法列表
  4. JAVA复习(二维数组——快排——迷宫)
  5. java byte转换成string_Java byte []到/从String转换
  6. java异常处理框架_深入探索 高效的Java异常处理框架(1)
  7. python 复制文件夹内容 并结构一致_Python-移动和覆盖文件和文件夹
  8. 税收java_String 类中的 isEmpty() 是判断字符串是否为空的,如果为空返回 true ,不为空返回 false 。 (1.0分)_学小易找答案...
  9. mysql的c接口_mysql C接口大全
  10. bat窗口大小设置_Tomcat的JVM和连接数设置