当前位置:编程学习 > C#/ASP.NET >>

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 --------------------编程问答--------------------
引用 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里面的数据转换成图片是吧? --------------------编程问答-------------------- [DllImport("<Unknown>", EntryPoint="capGetLastJpeg")]
public static extern  int capGetLastJpeg(int index, System.IntPtr pFrameBuf, uint bufferLen) ; --------------------编程问答--------------------
引用 3 楼 qldsrx 的回复:
[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,本身就是地址了,再传递地址的地址就错了。 --------------------编程问答--------------------
引用 5 楼 qldsrx 的回复:
利用Marshal类可以很方便的将IntPtr地址的数据转换为任意结构体或结构体数组(例如byte[]),因此那样写肯定是不会报错的。
当然你这里的情况,可以使用byte[]代替IntPtr,但是绝对不能添加ref关键字,ref关键字只能用在struct上,而byte[]是class,本身就是地址了,再传递地址的地址就错了。


谢谢,把数组是引用给忘了。。。我一会试试!
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,