现实

通过消息向程序的

这是我在用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

);

查看本文来源

什么原因造成脾气虚弱的
泰州白癜风医院
西安妇科治疗医院
友情链接