WinCE7 장치에서 C#을 사용하는 프로젝트에서 작업 중이며 사용하고있는 API.dll을 사용하는 방법을 파악할 수없는 것처럼 보입니다. 와 제공된. API는 gpio를 제어하는 데 사용되며 입력에 대한 인터럽트 기능을 포함합니다. API에 대한 문서는 매우 제한되어 있으며 코드 자체에 액세스 할 수 없습니다. 폴링 메커니즘을 사용하여 모든 작업을 처리 할 수 있었지만 인터럽트를 설정할 수 없습니다. 나는 msdn과 codeproject에 관한 기사를 많이 읽었으며 스택 오버 플로우 문제를 탐색했지만 코드는 여전히 실패합니다. 기능 I는 다음과 같습니다를 사용하려고 해요 : "명명 된 이벤트의 이벤트 이름"C#에서 C#에서 이벤트 트리거링 및 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에 대한 다음 설명에 대한 구조를 제공했습니다. 그게 내가이 기능을 제공 받았고 개발자에게 연락 할 수 없었습니다. pInvoke와 함께 LPCWSTR을 사용하는 것에 관한 몇 가지 질문을 발견했으며 수정 사항은 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
EDIT * : 나는 믿고 위에서 언급 한 기능을 (사용하여 C#에서 이벤트를 트리거 할 : 나는 명확히 오른쪽하지만 제목을 가지고 확실하지 C++로 작성)
나는 당신이 뭘하는지 정말로 모르겠다. 코드는'GpioSetupInterruptPin'을 호출하지 않으며,이 함수는 C# 이벤트를 전혀 알지 못한다. 당신은 콜백 함수를 전달하여 아무것도 트리거 할 수 있어야합니다. 나는'szEventName'이 C# 이벤트가 아닌 * 다른 * 종류의 이벤트라고 생각합니다. –
GpioSetupInterruptPin은 설정 기능이며 내 win form이 초기화 된 후이를 호출합니다. 늘어나는만큼 내가 말할 수있는 DLL에 인터럽트를 생성하는 이벤트가있을 수 있으며 그것을 실행하려는 메서드에 대리자를 보내야 할 것입니다. 나는이 질문과 유사하다고 생각한다. [link] (http://stackoverflow.com/questions/12576944/triggering-event-in-c-sharp-from-c-dll?lq=1)하지만 나는 그럴 수 없다. 그것을 szEventName으로 전달하는 방법을 설명합니다. 나는 이것을 약 1 주일 동안 고민하고 있었고 혼란스러워졌다. –