在C++写的dll中通过下面这条语句声明了一个Event事件hDecodeEvent,这个用来同步线程使用。
hDecodeEvent = CreateEvent(NULL,FALSE,FALSE,NULL);
但是hDecodeEvent如何通过DllImport的方式转进来呢,C#中的同步是使用EventWaitHandle,但这个好像没办法接收hDecodeEvent啊??
可以给你个例子
简单来说就是C#把收到数据怎么处理的代码写在委托中, C++在收到数据的时候去调用callback
这个可以换个思路。不要再c++和c#直接交错。而是让c++统一来处理
由c++来WaitForSingleObject等待事件event。然后包装成接口给c#来调用。
这样就不需要传递event给c#了。
他只要调用对应的导出接口函数。
理论上说CreateEvent创建的hDecodeEvent,你也可以在C#中通过调用API WaitForSingleObject和SetEvent来同步,但是不推荐这么做,最佳实践应该是让C++那里写一个callback,统一让C#这里来同步。
您好,我的程序是这样,我要将一批数据通过驱动程序发送到一块PCI板卡上,PCI板卡处理完数据后会产生一个中断,在驱动程序中这个中断会设置hDecodeEvent事件来通知C++程序数据处理完毕。我可以在C++中使用WaitForSingleObject来等待这个事件,但等到这个事件后,C++同样要同步的通知C#程序数据已经处理完成。不知道这个时候C++的dll应该通过什么方法来通知C#呢?
你可以考虑c++ c# 之间进程通信。一个简单方法是消息机制。WM_COPYDATA
http://blog.csdn.net/morewindows/article/details/6804157
就你的需求,你想复杂了,C++根本不需要再和C#同步,而是直接用callback。
也就是定义一个函数指针,作为C++的参数,C#那里传委托,将收到数据的操作写在里面。
@caozhy,您好,不太明白你说的用法,不知道有没有文章推荐?