在C++的dll接口函数定义:
  int SetRFSB(void * sbcs, HWND mhd);
  int ReadTagEPC(uchar sx = 0, uchar cc = 0, uchar *zz = NULL, uchar ln = 0, uchar *ym = NULL);
而在ReadTagEPC中读到数据就会向SetRFSB中的mhd窗口发送WM_RF_READTAG消息我以前用vc的时候先在头文件中自定义#define WM_RF_READTAG WM_USER + 101这个消息
然后在cpp文件中定义ON_MESSAGE(WM_RF_READTAG, OnRfReadTag),然后在SetRFSB函数中指定窗口的句柄就可以了现在换成C#平台调用,不知道该怎么处理这个WM_RF_READTAG消息,求高人相助,高速解决办法!!!!

解决方案 »

  1.   

    ON_MESSAGE也是基于对话框的,不是任何类都有的。那你这不已经指定窗体了么?
    c#下,处理消息,你可以参考2个方法。
    创体内消息,可以重载WndProc方法,整个进程的消息处理,例如vc的PerTranslateMessage的可以参考msdn中的IMessageFilter
    例如创体内public const int WM_USER = 0x400;
    public const int WM_RF_READTAG = WM_USER + 101;
    protected override void WndProc(ref Message m)
    {
        if (m.Msg == WM_RF_READTAG)
        {
            //your code here
        }
        base.WndProc(ref m);
    }
      

  2.   

    IMessageFilter 是消息预处理的一部分,所以它收到的消息是更全的  
    WndProc 继承自Control,收到针对本窗口自身的消息
    PreFilterMessage监视窗体消息,对消息进行分析
    public partial class Form1 : Form, IMessageFilter
        {
            int WM_LBUTTONDOWN = 0x0201;        public Form1()
            {
                InitializeComponent();            Application.AddMessageFilter(this);
            }        public bool PreFilterMessage(ref Message m)
            {
                if (m.Msg == WM_LBUTTONDOWN)
                    MessageBox.Show("WM_LBUTTONDOWN");
                return false;
            }        protected override void WndProc(ref Message m)
            {
                if (m.Msg == WM_LBUTTONDOWN)
                    MessageBox.Show(" WM_LBUTTONDOWN");
                base.WndProc(ref m);
            }
        }
      

  3.   

    SetRFSB(void * sbcs, HWND mhd);
    HWND mdh指定为当前应用程序的主窗体的句柄
    IntPtr mdh = Process.GetCurrentProcess().MainWindowHandle;其他参看1#