通过消息向程序的
这是我在用C#开发IOServer遇到的一个问题,该程序需要用到原先用MFC开发的DLL,最大问题是该dll运行过程中的一些信息,通过window消息向指定的hwnd(窗体句柄)发送数据。数据的指针放在WParam参数里,LParam参数是数据的类型信息。 C#提供 tLParam()函数,可惜我的数据放在WParam参数里(这个还不能修改,否则原有程序就无法运行了,修改的代价太高),所以这个函数不能用。
下面经过多次测试,终于获取数据成功。
MFC DLL中的相关代码:
TCHAR cMessage[255];
SYSTEMTIME stime;
GetLocalTime(stime);
swprintf(cMessage,_T(\"%04d-%02d-%02d %02d:%02d:%02d [%-16s #%03d] - %s \"),ear,onth,ay,our,inute,econd,strSource,lngNO,strMessage);
if (G_gMsgFlag==0)
2007中国络广告市场整体规模将达76.23亿元。 2007上半年中国络广告市场营收规模(不含搜索引擎在内)达32.7亿元人民币 {
SendMessage(G_nd, WM_USER+7722,(long)cMessage,lngType); //
}
在C#中需要重载窗体的消息处理函数,相关代码如下:
[DllImport(\"kernel32\", EntryPoint = \"CopyMemory\")]
public static extern void CopyMemory(StringBuilder Destination,IntPtr Source,int Length);
/// summary
/// 重载窗口函数
/// /summary
/// param name=\"m\"/param
protected override void WndProc(ref Message m)
{
//---------------------
if(g == 0x0400 + 7722)
{
StringBuilder strData = new StringBuilder(255);
CopyMemory(strData, aram, 255);
ShowInfo((int)aram,String());
}
//---------------------
dProc(ref m);
}
注意:CopyMemory函数的声明需要自己修改(原声明如下),一定要去掉“ref” 关键字,否则会获取不正确。
[DllImport(\"kernel32\", EntryPoint=\"CopyMemory\")]
public static extern void CopyMemory (
ref int Destination,
ref int Source,
int Length
);
查看本文来源
什么原因造成脾气虚弱的泰州白癜风医院
西安妇科治疗医院
- 06月21日现实称职犬主在爱犬需要时出手位置
- 06月21日现实科普母猫不孕不发情的五大原因位置
- 06月21日现实秋田犬为什么不能养野性是主要原因位置
- 06月21日现实研究称狗祖先来自中国南方或通过丝绸之路迁位置
- 06月21日现实科学家带你一起揭开猫喝水的秘密位置
- 06月20日现实可卡犬左眼有很多黄色的眼屎该怎么办位置
- 06月20日现实可卡吃什么对毛好位置
- 06月20日现实可以给贵宾犬喝牛奶吗位置
- 06月20日现实可以导致吉娃娃死亡的一些原因位置
- 06月20日现实可以和宠物狗睡觉吗位置
- 06月20日现实可卡犬什么时候注射疫苗才好位置
- 06月20日现实可卡犬不慎误食异物怎么办知识位置