日期:2014-05-17  浏览次数:20893 次

我不信没有高手帮忙!
C#做界面新手,以前用的MFC,现在我要在C#程序中调用VC++写的DLL库,遇到两个问题:
1.C++库中函数原型为:BOLL LoadCode(char* databuf,int len);//功能为获取buf中的内容和长度然后进行下一步操作
  C#中 Extern bool LoadCode(byte []databuf,int len);
      调用方式大概为:
       ...
      byte[]PFileBuf =new byte[20*1024*1024];
      filehandle =openFileDialog1.OpenFile();
      filehandle.Read(PFileBuf,0,(int)filehandle.length);
      LoadCode(PFileBuf,(int)filehandle.length);
运行结果在获取了文件内容后,在底层对文件进行操作时会蓝屏,但是操作是成功的(此为配置文件,将板卡上面的灯成功点亮了)!请大家指教!
2.C++库中BOOL SetEventHandle(HANDLE hEvent)
{
   ....Window响应中断后
   hEvent->Set();//这句话是在驱动程序中执行的,hEvent由DLL中的hEvent传入
}
在C#中Extern bool SetEventHandle(AutoResetEvent hEvent);//貌似C#下不能用HANDLE定义?
AutoResetEvent  event =new AutoResetEvent ;//创建事件
SetEventHandle(event );//初始化事件
然后在线程中等待底层事件的触发 
...
{
    if(event.waitone(1000))//等待事件的触发
....接下来的操作省略
}
现在的问题是,一旦我底层触发事件,电脑直接死机或者蓝屏!是C#初始化事件方式不对么?我在MFC下用CREATEEVENT创建事件和Waiteforobject()等待事件触发完全没问题啊?
困扰我几天了,不知道有木有大神用过C#调用C++的库与我类似的经历,不胜感激!
c# mfc vc++ dll byte

------解决方案--------------------
蓝屏?难道你的C程序是驱动吗?
------解决方案--------------------
try

AutoResetEvent  event =new AutoResetEvent ;//创建事件
SetEventHandle(event.SafeWaitHandle );//初始化事件