求教:C#调用C++写的DLL 关于 unsigned char*的声明问题

hfdsoft 2013-05-23 12:05:45
1、SDK.H 中有声明以下函数

//回调
typedef bool (CALLBACK *DataCallBack)(int index, int type, BYTE *pData, int len, int param1, int param2);
//设置回调
DLL_EXPORT int WAPA_IPC_SetDataCallBack(DataCallBack fData);
//连接摄像机
DLL_EXPORT int WAPA_IPC_Login(char *sCameraIp, int dataFormat);
//初始化解码器
DLL_EXPORT int WAPA_IPC_InitDec(int index, int width, int height, int encodeFormat, int dataFormat);
//解码
DLL_EXPORT int WAPA_IPC_Dec(int index, unsigned char *istream, int istream_size, unsigned char *ostream);
//拍照并保存
DLL_EXPORT int WAPA_IPC_OnPhoto(int index, unsigned char* pImageBuf, int width, int height, int dataFormat, char* fileName = NULL);


2、我在C#中声明如下

publlic class WAPAMethods
{
//回调
public unsafe delegate bool DataCallBack(int index, int mode, byte* data, int len, int w, int h);
/// <summary>
/// 设置事件回调函数
/// </summary>
/// <param name="fEvent"></param>
/// <returns></returns>
[DllImport(WAPA_DLL, EntryPoint = "WAPA_IPC_SetEventCallBack", CallingConvention = CallingConvention.Cdecl)]
public static extern int WAPA_IPC_SetEventCallBack(EventCallBack fEvent);
/// <summary>
/// 连接到录像机
/// </summary>
/// <param name="sCameraIp">IP地址</param>
/// <param name="dataFormat">0:解码前数据;1:YUYV格式数据;2:RGB格式数据</param>
/// <returns></returns>
[DllImport(WAPA_DLL, EntryPoint = "WAPA_IPC_Login", CallingConvention = CallingConvention.Cdecl)]
public static extern int WAPA_IPC_Login(string sCameraIp, int dataFormat);
/// <summary>
/// 初始化解码器
/// </summary>
/// <param name="index"></param>
/// <param name="width">图像宽</param>
/// <param name="height">图像高</param>
/// <param name="encodeFormat">压缩数据格式 264:H.264;265:MPEG4</param>
/// <param name="dataFormat">输出的数据格式 1:YUYV;2:RGB</param>
/// <returns></returns>
[DllImport(WAPA_DLL, EntryPoint = "WAPA_IPC_InitDec", CallingConvention = CallingConvention.Cdecl)]
public static extern int WAPA_IPC_InitDec(int index, int width, int height, int encodeFormat, int dataFormat);
/// <summary>
/// 解码
/// </summary>
/// <param name="index">解码器索引号</param>
/// <param name="istream">编码数据</param>
/// <param name="istream_size">编码的数据大小</param>
/// <param name="ostream">解码后的数据</param>
/// <returns></returns>
[DllImport(WAPA_DLL, EntryPoint = "WAPA_IPC_Dec", CallingConvention = CallingConvention.Cdecl)]
//DLL_EXPORT int WAPA_IPC_Dec(int index, unsigned char *istream, int istream_size, unsigned char *ostream);
public static extern unsafe int WAPA_IPC_Dec(int index, byte* istream, int istream_size, byte* ostream);
//拍照. pImageBuf:返回的数据. dataFormat:YUYV,RGB
[DllImport(WAPA_DLL, EntryPoint = "WAPA_IPC_OnPhoto", CallingConvention = CallingConvention.Cdecl)]
public static extern unsafe int WAPA_IPC_OnPhoto(int index,byte* pImageBuf, int width, int height, int dataFormat, string fileName = null);

}

3、在Winform中调用

public partial class Form1 : Form
{
private WAPAMethods.DataCallBack _dataCallBack;
private unsafe byte* frameBuf;
private unsafe void Form1_Load(object sender, EventArgs e)
{
_dataCallBack = DataOnReceived;
WAPAMethods.WAPA_IPC_SetDataCallBack(_dataCallBack);
Reconnected();
}
public void Reconnected()
{
//连接摄像机
_cameraIndex = WAPAMethods.WAPA_IPC_Login(_ip,2);
if(_cameraIndex==206)return;
//连接成功后初始化解码器
WAPAMethods.WAPA_IPC_InitDec(_cameraIndex, 1280, 960, 264, 2);
}
private unsafe bool DataOnReceived(int index, int mode, byte* data, int len, int w, int h)
{
//解码
var ret = WAPAMethods.WAPA_IPC_Dec(index,data, len, frameBuf);
//拍照
ret = WAPAMethods.WAPA_IPC_OnPhoto(index, frameBuf, w, h, 2, null);
return true;
}
}


问题来了:frameBuf应该是解码后的视频指针地址,可现在神马也没有,断点显示是0x000000,请问这个unsigned char *的参数要怎么声明?

...全文
429 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
本拉灯 2013-06-04
  • 打赏
  • 举报
回复
http://08ylyuan.blog.163.com/blog/static/1263916622010069414436/
本拉灯 2013-06-04
  • 打赏
  • 举报
回复
byte[xxx] frameBuf=new [xxx]; fixed(byte * pucOut = &frameBuf[0]) { ret = WAPAMethods.WAPA_IPC_OnPhoto(index, pucOut , w, h, 2, null); }
hfdsoft 2013-06-04
  • 打赏
  • 举报
回复
就这样匿了么。。
mei_love_feng 2013-05-23
  • 打赏
  • 举报
回复
好高级,顶下下
viki117 2013-05-23
  • 打赏
  • 举报
回复
unsigned char* 和 unsigned char * 不一样的 unsigned char* 用ref byte unsigned char *用byte*
jiaoshiyao 2013-05-23
  • 打赏
  • 举报
回复
路过
dcdlove123 2013-05-23
  • 打赏
  • 举报
回复
不会不会不会

110,545

社区成员

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

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

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