DllImport类型转换问题
我在做一个摄像头采集程序,需要引用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#中该怎么定义呢?
小弟分不多,只能用所有的积分了。
谢了! C++ C# WINCE --------------------编程问答-------------------- int就是int
un char* 可以用byte[]
un int unint32 --------------------编程问答--------------------
也就是这样呗
[DLLImport("asdf.dll")]
public static extern int capGetLastJpeg(int index,ref byte[] pFrameBuf,unint32 bufferLen);
然后将pFrameBuf里面的数据转换成图片是吧? --------------------编程问答-------------------- [DllImport("<Unknown>", EntryPoint="capGetLastJpeg")]
public static extern int capGetLastJpeg(int index, System.IntPtr pFrameBuf, uint bufferLen) ; --------------------编程问答--------------------
这个是微软的那个工具生成的吧 --------------------编程问答-------------------- 利用Marshal类可以很方便的将IntPtr地址的数据转换为任意结构体或结构体数组(例如byte[]),因此那样写肯定是不会报错的。
当然你这里的情况,可以使用byte[]代替IntPtr,但是绝对不能添加ref关键字,ref关键字只能用在struct上,而byte[]是class,本身就是地址了,再传递地址的地址就错了。 --------------------编程问答--------------------
谢谢,把数组是引用给忘了。。。我一会试试!
补充:.NET技术 , C#