2013-04-03 99 views
0

我在C这个功能++,我想在C#C++到C#DLL导入ReadImage

BS_RET_CODE BS_ReadImage(int handle, int imageType, unsigned char* bitmapImage, int* imageLen) 

我已经试过

[DllImport("BS_SDK.dll",CharSet = CharSet.Ansi, EntryPoint = "BS_ReadImage")] 
public static extern int BS_ReadImage(int handle, int imageType, IntPtr bitmapImage, ref int imageLen); 

IntPtr image = new IntPtr(); 
int len = 0; 
BSSDK.BS_ReadImage(m_Handle, 0xff, image, ref len); 

byte[] _imageTemp = new byte[len]; 
Marshal.Copy(image, _imageTemp, 0, len); 

导入,但我得到一个访问冲突异常

+0

它必须将图像读入东西。这肯定是你应该作为* bitmapImage *属性传递的缓冲区。改为一个字节[]。 – 2013-04-03 21:56:34

+0

I解决了它 [DllImport(“BS_SDK.dll”,CharSet = CharSet.Ansi,EntryPoint =“BS_ReadImage”)] public static extern int BS_ReadImage(int handle,int imageType,byte [] bitmapImage,ref int imageLen) ; byte [] image = new byte [84022]; int len = 0; BSSDK.BS_ReadImage(m_Handle,255,image,ref len); 位图b =新的位图(Image.FromStream(new System.IO.MemoryStream(image))); b。保存(@“C:\ temp \ image.jpg”); – user2167504 2013-04-03 22:04:06

+0

但我不知道如何我应该使用imageLen保留内存,如果我不知道它,直到我打电话BS_ReadImage,我设置图像字节[]大尺寸,然后我看着imageLen设置字节[ ]与适当的大小 – user2167504 2013-04-03 22:06:07

回答

0

也许你应该检查len事实上等于或大于image的大小?

发生异常的位置在哪里?什么线?