以下是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重新编辑 ]