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++的库与我类似的经历,不胜感激!
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++的库与我类似的经历,不胜感激!