主题 : 关于使用C#来实现ADC显示!!!!大家快来一起研究下 复制链接 | 浏览器收藏 | 打印
ken
级别: 新手上路
UID: 16487
精华: 0
发帖: 27
金钱: 135 两
威望: 27 点
贡献值: 0 点
综合积分: 54 分
注册时间: 2010-03-18
最后登录: 2010-07-04
楼主  发表于: 2010-03-30 20:22

 关于使用C#来实现ADC显示!!!!大家快来一起研究下

以下是VC#代码
using System;

using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using Microsoft.WindowsCE.Forms;
using HANDLE = System.IntPtr;
namespace Test0329
{
    public partial class Dialog : Form
    {
        [DllImport("coredll.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi, CharSet = CharSet.Auto)]
        public static extern HANDLE CreateEvent(HANDLE lpEventAttributes, [In, MarshalAs(UnmanagedType.Bool)] bool bManualReset, [In, MarshalAs(UnmanagedType.Bool)] bool bIntialState, [In, MarshalAs(UnmanagedType.BStr)] string lpName);

        [DllImport("coredll.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi, CharSet = CharSet.Auto)]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool CloseHandle(HANDLE hObject);

        [DllImport("coredll.dll", SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool EventModify(HANDLE hEvent, [In, MarshalAs(UnmanagedType.U4)] int dEvent);

        private Dialog2 MsgWin;


        public Dialog()
        {
            this.MsgWin = new Dialog2(this);
            InitializeComponent();
        }

        public void HandleMsg(string str)
        {
            label1.Text = str;
        }

        [DllImport("Coredll.dll", SetLastError = true)]
        static extern IntPtr OpenEvent(uint dwDesiredAccess, bool bInheritHandle, string lpName);

        const uint STANDARD_RIGHTS_REQUIRED = 0x000F0000;
        const uint SYNCHRONIZE = 0x00100000;
        const uint EVENT_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3);
        const uint EVENT_MODIFY_STATE = 0x0002;
        const long ERROR_FILE_NOT_FOUND = 2L;
        
        private void button1_Click(object sender, EventArgs e)
        {
           IntPtr handle = OpenEvent(EVENT_ALL_ACCESS, false, "ADC_EVENT_FROM_FRIENDLYARM");
           if (handle != IntPtr.Zero)
            {
                //Console.Write("OOO");
                label2.Text = "OOO";
            }
            else
            {
                //Console.Write("EEE");
                label2.Text = "EEE";
            }

            SetEvent(handle);
        }

        public enum EventFlags
        {
            PULSE = 1,
            RESET = 2,
            SET = 3
        }
        private static bool SetEvent(HANDLE hEvent)
        {
            return EventModify(hEvent, (int)EventFlags.SET);
        }
        private static bool ResetEvent(HANDLE hEvent)
        {
            return EventModify(hEvent, (int)EventFlags.RESET);
        }


    }
    public struct COPYDATASTRUCT
    {
        public int dwData;
        public int cbData;
        public IntPtr lpData;
    }

    public class Dialog2 : MessageWindow
    {
        const int WM_COPYDATA = 0x004A;

        private Dialog msgForm;

        public Dialog2(Dialog msgForm)
        {
            this.msgForm = msgForm;
        }

        protected override void WndProc(ref Message msg)
        {
            if (msg.Msg == WM_COPYDATA)
            {
                string str = GetMsgString(msg.LParam);
                msgForm.HandleMsg(str);
            }
            else
            {
                msgForm.HandleMsg("error"+DateTime.Now.Second.ToString());
            }
        }

        public static string GetMsgString(IntPtr lParam)
        {
            if (lParam != IntPtr.Zero)
            {
                COPYDATASTRUCT st = (COPYDATASTRUCT)Marshal.PtrToStructure(lParam, typeof(COPYDATASTRUCT));
                string str = st.dwData.ToString(); //Marshal.PtrToStringUni(st.dwData.ToString());
                return str;
            }
            else
            {
                return null;
            }
        }
    }
}



以上是我用C#写的代码,且label2.Text = "OOO"能显示,
说明已经执行OpenEvent(EVENT_ALL_ACCESS, false, "ADC_EVENT_FROM_FRIENDLYARM");
但是 label1.Text 就没法显示一点信息都没有
不知哪位高手能指点指点!!!不甚感激!!!!
[ 此帖被ken在2010-04-01 11:27重新编辑 ]
级别: 新手上路
UID: 18854
精华: 0
发帖: 19
金钱: 95 两
威望: 19 点
贡献值: 0 点
综合积分: 38 分
注册时间: 2010-04-13
最后登录: 2010-08-15
1楼  发表于: 2010-06-20 11:39
C#2008不行啊,那个message window和message 报错
级别: 新手上路
UID: 37374
精华: 0
发帖: 10
金钱: 60 两
威望: 12 点
贡献值: 0 点
综合积分: 20 分
注册时间: 2011-02-07
最后登录: 2013-12-31
2楼  发表于: 2011-05-27 15:47
同上,确实报错