DllImport类型转换问题

dongxy14 2013-04-18 02:42:27
我在做一个摄像头采集程序,需要引用C++生成的DLL中的一个函数,C++函数签名如下,在C#中该怎么定义呢?

//index:摄像头编号
//pFrameBuf:用来接收一帧JPEG静态图片的缓冲区
//bufferLen:用来接收一帧JPEG静态图片的缓冲区
int capGetLastJpeg(int index,unsigned char *pFrameBuf,unsigned int bufferLen)

C++获取、保存图片代码

void MakeJpeg()
{
int length = 0;
int bufferLen = 40960;
PBYTE buffer = malloc (bufferLen);

length = capGetLastJpeg(0, buffer, bufferLen);
if (length)
{
HANDLE hFile = NULL;
DWORD dwWritten = 0;

hFile = CreateFile(TEXT("\\out.jpg"), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile != INVALID_HANDLE_VALUE)
{
WriteFile(hFile, buffer, length, &dwWritten, NULL);
CloseHandle(hFile);

//MessageBox(NULL, TEXT("Write jpeg success."), TEXT("Notice"), MB_OK);
}
}

if (buffer)
{
free (buffer);
}
}


请问在C#中该怎么定义呢?
小弟分不多,只能用所有的积分了。
谢了!
...全文
191 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
dongxy14 2013-04-20
  • 打赏
  • 举报
回复
引用 5 楼 qldsrx 的回复:
利用Marshal类可以很方便的将IntPtr地址的数据转换为任意结构体或结构体数组(例如byte[]),因此那样写肯定是不会报错的。 当然你这里的情况,可以使用byte[]代替IntPtr,但是绝对不能添加ref关键字,ref关键字只能用在struct上,而byte[]是class,本身就是地址了,再传递地址的地址就错了。
谢谢,把数组是引用给忘了。。。我一会试试!
qldsrx 2013-04-19
  • 打赏
  • 举报
回复
利用Marshal类可以很方便的将IntPtr地址的数据转换为任意结构体或结构体数组(例如byte[]),因此那样写肯定是不会报错的。 当然你这里的情况,可以使用byte[]代替IntPtr,但是绝对不能添加ref关键字,ref关键字只能用在struct上,而byte[]是class,本身就是地址了,再传递地址的地址就错了。
dongxy14 2013-04-19
  • 打赏
  • 举报
回复
引用 3 楼 qldsrx 的回复:
[DllImport("<Unknown>", EntryPoint="capGetLastJpeg")] public static extern int capGetLastJpeg(int index, System.IntPtr pFrameBuf, uint bufferLen) ;
这个是微软的那个工具生成的吧
qldsrx 2013-04-18
  • 打赏
  • 举报
回复
[DllImport("<Unknown>", EntryPoint="capGetLastJpeg")] public static extern int capGetLastJpeg(int index, System.IntPtr pFrameBuf, uint bufferLen) ;
dongxy14 2013-04-18
  • 打赏
  • 举报
回复
引用 1 楼 bdmh 的回复:
int就是int un char* 可以用byte[] un int unint32
也就是这样呗 [DLLImport("asdf.dll")] public static extern int capGetLastJpeg(int index,ref byte[] pFrameBuf,unint32 bufferLen); 然后将pFrameBuf里面的数据转换成图片是吧?
bdmh 2013-04-18
  • 打赏
  • 举报
回复
int就是int un char* 可以用byte[] un int unint32

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧