关于网友提出的“求助,调用动态库问题,各位大神帮帮忙啊”问题疑问,本网通过在网上对“求助,调用动态库问题,各位大神帮帮忙啊”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题:求助,调用动态库问题,各位大神帮帮忙啊
描述: 本人新手,刚接手了一个项目,对于动态库引用这块 ,有很多不太了解,希望各位大神们能帮帮忙
///
/// 实时数据回调函数
///
/// NET_SDK_RealPlay 返回值
/// 视频数据
/// 数据长度
/// 视频详细信息
/// 用户数据
typedef void (CALLBACK *fnRealDataCallBack) (LONG nRealHandle, unsigned char* pBuffer, LONG nSize, LPFrameInfo lpFrame, void* pUser);
//============================实时预览===================================
///
/// 实时预览
///
/// NET_SDK_Login的返回值
/// 预览参数
/// 预览回调数据,非解码数据
/// 用户数据
/// -1失败,其他值作为NET_SDK_StopRealPlay等函数传入参数
IRLABNETSDK_API LONG __stdcall NET_SDK_RealPlay(LONG nLoginID, LPNET_SDK_ClientInfo lpClientInfo,
fnRealDataCallBack fuRealDataCB = NULL, void* pUser = NULL)
这是动态库的部分接口函数,我想在c#调用NET_SDK_RealPlay这个函数,怎么实现?对于c#调用回调函数这块,真的是不太理解,网上收索很多资料,但是看了感觉还是迷迷糊糊的
解决方案1: Mark,你可以根据你的项目名称搜索一下
解决方案2: void (CALLBACK *fnRealDataCallBack) (LONG nRealHandle, unsigned char* pBuffer,)
==》
Action Action_CallBack = delegate( long ln , string s ){ } ;
LONG __stdcall NET_SDK_RealPlay(LONG nLoginID, LPNET_SDK_ClientInfo lpClientInfo,
fnRealDataCallBack fuRealDataCB = NULL, void* pUser = NULL)
==>>
long NET_SDK_RealPlay( long nloginID , obj ,lpClientInfo, int callback , out object pUser) ;
上面的代码还要加Dll...,这里就不写了,主要是如何调用这个函数(下面是伪代码)
Inptr p = Marshal.GetFunctionPointerForDelegate( Action_CallBack );
int intP = p.toInt();
object obj =null ;
Marshal.getObjectFor
long rs = NET_SDK_RealPlay( 111 , new object() , intP , out obj )
大概是这样子的思路吧,这里还涉及了一些非托管的控制技术,看一下另写的非托管代码吧,应该有这方面的示例
(我没空了)
以上介绍了“求助,调用动态库问题,各位大神帮帮忙啊”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/961257.html