读书人

C# 调用VC DLL 的有关问题

发布时间: 2012-04-12 15:46:35 作者: rapoo

C# 调用VC DLL 的问题
大概流程是 C#读取一个图片 ,将图片数据的首地址传给DLL,DLL内部对图片进行处理。出现System.Runtime.InteropServices.SEHException错误。 - -刚开始C#很纠结

C++代码如下:

C/C++ code
/*    psrc  传入图像首地址    pdst  DLL 对psrc处理有保存在pdst对应的内存中*/extern "C" _declspec(dllexport)  int clip2( unsigned char *psrc , unsigned char *pdst , int nwidth , int nheight); int clip2( unsigned char *psrc , unsigned char *pdst , int nwidth , int nheight) {    //..............  }


c#代码如下
C# code
  unsafe private static extern int clip2(byte* psrc, byte* pdst, int nwidth, int height);



C# code
            Bitmap bp = new Bitmap("a.bmp");            this.pictureBox1.Image = bp            int w = bp.Width; ;            int h = bp.Height; ;                       Bitmap buf = new Bitmap(w,h,PixelFormat.Format24bppRgb);            BitmapData datasrc = bp.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);            BitmapData datadst = buf.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);            unsafe            {                byte * psrc = (byte *)datasrc.Scan0.ToPointer();                byte *pdst = (byte *)datadst.Scan0.ToPointer();                clip2(ptr, pdst, w, h);            }




[解决办法]
C#调用C++的dll不需要使用unsafe代码:
http://msdn.microsoft.com/zh-cn/library/26thfadc.aspx
http://msdn.microsoft.com/zh-cn/library/42b9ea93.aspx
[解决办法]
刚试了一下你的代码,没有出现你说的问题
除了几处可能的手误:clip2(psrc, pdst, w, h)
最大的可能是问题在dll本身(我自己写的dll做了简单的处理,把图像进行反相)

读书人网 >C#

热点推荐