我已經在一個項目中使用C#一直在努力,我似乎無法能夠弄清楚如何使用API.dll我一直提供。 API用於控制gpio幷包含輸入的中斷函數。我爲api提供的文檔非常有限,我無法訪問代碼本身。我設法使用輪詢機制來使所有的工作都能正常工作,但我似乎無法設置中斷。我讀過很多關於msdn和codeproject的文章,並通過一些堆棧溢出問題進行了瀏覽,但是我的代碼仍然失敗。 功能我想使用看起來像這樣:觸發由C++ C#的事件和WinCE7設備上宣佈LPCWSTR
BOOL GpioSetupInterruptPin(HANDLE hGPIO, PIN_GPIO_PORT port, UINT pin, INT_TRIGGER_MODE mode, INT_TRIGGER_POLARITY polarity, LPCWSTR szEventName, BOOL enable);
我已經給出了PORT,TRIGGER_MODE和TRIGGER_POLARITY和szEventName下面的描述結構:「指定事件的事件名稱」。這就是我爲這個功能所做的一切,我一直無法聯繫開發人員。 我發現關於使用LPCWSTR用的PInvoke和修復了幾個問題要麼設置CHARSET到Charset.Unicode或編組爲UnmanagedType.LPArray,但我注意到確保修補程序辦理此案。 此外,我在c#中的事件處理新手,我不知道我是否正確地做到了這一點。
public class StartEventArgs : System.EventArgs
{
private GPIOapi.PIN_GPIO_PORT port;
private uint pin;
public StartEventArgs(GPIOapi.PIN_GPIO_PORT port,uint pin)
{
this.port = port;
this.pin = pin;
}
}
public delegate void StartEventHandler(StartEventArgs e);
public class GPIO_In
{
public event StartEventHandler TriggerDown;
public event StartEventHandler TriggerUp;
protected virtual void OnTriggerDown(StartEventArgs e)
{
if (TriggerDown != null)
TriggerDown(e);
}
protected virtual void OnTriggerUp(StartEventArgs e)
{
if (TriggerUp != null)
TriggerUp(e);
}
public void DoTrigger(GPIOapi.PIN_GPIO_PORT port, uint pin)
{
OnTriggerDown(new StartEventArgs(port, pin));
//....
OnTriggerUp(new StartEventArgs(port, pin));
}
}
private GPIO_In input;
public Form1()
{
InitializeComponent();
input=new GPIO_In();
connect();
}
void connect()
{input.TriggerDown+=new StartEventHandler(this.Check);}
private void Check(StartEventArgs e)
{
GetInput(pin1, port6, pin_level);
}
有沒有人有任何想法如何使用此功能,他們是否會足夠分享一些他們的經驗?謝謝。 一些資源我已經厭倦了:
http://msdn.microsoft.com/en-gb/library/aa288459(v=vs.71).aspx
http://msdn.microsoft.com/en-gb/library/aa645739(v=vs.71).aspx
http://stackoverflow.com/questions/7609225/c-to-c-sharp-event-handling
http://stackoverflow.com/questions/17073386/raise-events-in-c-cli-dll-and-consume-in-c-sharp
http://stackoverflow.com/questions/12576944/triggering-event-in-c-sharp-from-c-dll
http://www.codeproject.com/Questions/155043/Raise-C-event-and-catch-in-C
http://stackoverflow.com/questions/2969654/how-to-marshall-a-lpcwstr-to-string-in-c
http://www.codeproject.com/Questions/460787/Which-data-type-in-Csharp-equivalent-with-LPCWSTR
http://msdn.microsoft.com/En-US/library/aa288468(VS.71).aspx#pinvoke_example1
編輯*:不知道如果我得到了所有權的權利,但澄清:我想觸發使用上述功能(我認爲這是在C#中的事件用C++編寫)
我真的不明白你以後...您的代碼不調用'GpioSetupInterruptPin',而這個函數不能有C#事件的任何知識。你必須傳遞一個回調函數才能觸發任何東西。我猜'szEventName'是一些其他類型的事件,而不是C#事件。 – 2014-11-24 15:00:31
GpioSetupInterruptPin是設置功能,我在我的勝利表單初始化後調用它。據我所知,可能有一個事件在DLL中產生中斷,我不得不將它委託給我想要執行的方法。我認爲這是類似於這樣的問題:[鏈接](http://stackoverflow.com/questions/12576944/triggering-event-in-c-sharp-from-c-dll?lq=1),但我想不出瞭解如何將它作爲szEventName傳遞。我一直在爲此掙扎大約一週,而我可能最終會迷惑自己 – 2014-11-24 15:21:33