+ -
当前位置:首页 → 问答吧 → 求助关于C#与C++之间的数据传输问题

求助关于C#与C++之间的数据传输问题

时间:2011-12-07

来源:互联网

通过C++读取视频图像后想要将视频图像数据实时在C#中使用,但是拷贝内存导致了帧率下降,请问什么办法能够使得C#直接读取C++分配的这块内存里的数据?

作者: lixianxiashi89   发布时间: 2011-12-07

两种方式
1.c++ 自己将数据通过http请求提交到 asp.net 网站,
2.asp.net 网站部分编写一个webservice,供c++调用

作者: hefeng_aspnet   发布时间: 2011-12-08

建议用Socket!

作者: sdl2005lyx   发布时间: 2011-12-08

你可以用IntPtr返回内存指针(在c++中是DWORD在c#中是IntPtr),然后在c#中用unsafe代码使用指针处理这些数据,不过这样做不好,

作者: stonespace   发布时间: 2011-12-08

3楼的办法可以使用,不过看看稳定性再说。

和C++做数据交互不安全的指针是不可避免的。

作者: mjp1234airen4385   发布时间: 2011-12-08

以前在C#里做过和VC的数据交互,十分郁闷呀,数据是能取到,但是一会儿就出错了。
最后推测是C#自动回收内存造成的。

作者: mjp1234airen4385   发布时间: 2011-12-08


C++函数
/// Return Type: void
  ///player: CFlashPlayer*
  ///buffer: void**
  ///width: int*
  ///height: int*
  ///stride: int*
  ///format: int*
  ///获取当前的图像的内存
  [System.Runtime.InteropServices.DllImportAttribute("XSwfDec.dll", EntryPoint = "flashplayer_get_current_bitmap", CallingConvention = System.Runtime.InteropServices.CallingConvention.StdCall)]
  public static extern void flashplayer_get_current_bitmap(ref System.IntPtr buffer, ref int width, ref int height, ref int stride, ref int format);


C#使用
#region 获得当前的内存中的位图

  IntPtr bufferPtr = IntPtr.Zero;
  int width =0;
  int height =0;
  int stride =0;
  int format =0;
  XSwfPlayerforWin.NativeMethods.flashplayer_get_current_bitmap(ref bufferPtr, ref width, ref height, ref stride, ref format);
  XSwfPlayerforWin.NativeMethods.flashplayer_pause();
   
  Bitmap bit = new Bitmap(width, height, stride, (System.Drawing.Imaging.PixelFormat)format, bufferPtr);
  objcrop.CropImage = (Image)bit;
  #endregion

作者: chen_hong_wei   发布时间: 2011-12-08

引用 4 楼 mjp1234airen4385 的回复:
3楼的办法可以使用,不过看看稳定性再说。

和C++做数据交互不安全的指针是不可避免的。


~~~~

作者: jiangfling   发布时间: 2011-12-08

涉及到应用程序间的数据交换问题,你可以使用webservice来实现。

作者: luzhenhua0207   发布时间: 2011-12-08

拷贝内存尚且丢帧,就不应该有人硬往web service这种东西上套了。

作者: sp1234   发布时间: 2011-12-08

平台调用N多次,没出现没什么问题,注意数据类型的对应。C++可以传一个指针,C#里用Intptr

作者: My_ID_is_NULL   发布时间: 2011-12-08

一次内存拷贝应该损失不了多少效率,降低帧率就更不太可能了,你帧率目前是多少?拷贝一次内存需要多长时间有没有计算过?

作者: yfqvip   发布时间: 2011-12-08