当前位置: 首页 > 编程语言 > C#

C#WrappersandCallbacks分享

时间:2023-04-11 11:01:03 C#

C#WrappersandCallbacksC#包装器。因此,我使用Canon包装器作为编写Dallmeier包装器的指南。我目前在包装回调时遇到问题。在API手册中,它具有以下内容:dlm_connectint(unsignedlonguLWindowHandle,constchar*strIP,constchar*strUser1,constchar*strPwd1,constchar*strUser2,constchar*strPwd2,void(*callback)(void*pParameters,void*pResult,void*pInput),void*pInput)参数-ulWindowhandle-传递给ViewerSDK以在其中显示视频和消息的窗口句柄-strUser1/2-要登录的用户名。如果仅使用单用户登录,那么strUser2是-空值-strPwd1/2-两个用户的密码。如果strUser2为NULL,则忽略strPwd2。返回此函数会创建一个必须传入的SessionHandle。回调pParameters将被结构化:-unsignedlongulFunctionID-unsignedlongulSocketHandle,//处理已建立连接的套接字-unsignedlongulWindowHandle,-intSessionHandle,//创建的会话会话句柄–constchar*strIP,–constchar*strUser1,–constchar*strPwd1,–constchar*strUser2,–constchar*strPWD2pResult是一个指针,指向一个表示操作结果的整数。成功归零。负值是错误码。因此,根据我在网络和StackOverflow上看到的内容-C#使用委托进行回调。所以我创建了一个回调函数:publicdelegateuintDallmeierCallback(DallPparameterspParameters,IntPtrpResult,IntPtrpInput);我创建了连接函数[DllImport("davidapidis.dll")]publicexternstaticintdlm_connect(intulWindowHandle,stringstrIP,stringstrUser1,stringstrPwd1,stringstrUser2,stringstrPwd2,DallmeierCallbackinDallmeierFunc和(我认为)DallPParameters作为结构:[StructLayout(LayoutKind.Sequential)]publicstructDallPParameters{publicintulfunctionID;publicintulfunctionID;publicintandulsocketHulow;W..}都在我的包装类中。我是朝着正确的方向前进还是完全错了?然后在我的Dallmeier类中,我有以下内容:privateDallmeierAPIdallmeierAPI;私有DallmeierSDK.DallmeierCallbackdallCallbackHandler;私有GCHandle句柄;私有IntPtrpResult;私有IntPtrpInput;内部Dallmeier(){this.dallmeierAPI=DallmeierAPI.Instances(注册);}privatevoidregisterEvents(){//注册回调事件dallCallbackHandler=newDallmeierSDK.DallmeierCallback(pParameters,pResult,pInput);//错误:方法名称预期handle=GCHandle.Alloc(dallCallbackHandler);}privatevoidunregisterEvents(){handle.Free();}privateDallmeierSDK.DallPParameterspParameters(intulfunctionID,intulSocketHandl,intulWindowHandle,intSessionHandle,stringstrIP,stringstrUser1,stringstrPwd1,stringstrUser2,stringstrPwd){//what:Errorgoesinherenotallcodepathsreturnavalue所以当我注册回调它说一个预期的方法名称?和pParameters期望返回值?大多数时候你都在正确的轨道上。但是,Clong是(我相信)32位并映射到C#int。此外,在调用函数后,必须保留对传递的委托实例的托管引用,以确保委托不会被垃圾回收。以上就是《C#学习教程:C#Wrapper与Callback分享》的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权请点击右侧联系管理员删除。如需转载请注明出处: