网站大量收购独家精品文档,联系QQ:2885784924

c调用c++中回调函数资料整理.doc

  1. 1、本文档共33页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
c调用c中回调函数资料整理

C#调用C++回调函数的问题 2008年10月24日 virus 1 2 下一页   C++的回调函数中有一个参数是,是返回一个字符串,原则如下:   typedef  void  (*TDataEvent)(char  *AData  ,int  ALen);   其中char  *AData是从DLL中返回一个字符串,串的内存已经在DLL中分配了   下面中我在C#中定义的委托   public  delegate  void  TDataEvent(Byte[]  AData,  int  ALen);   下面是回调函数的设置代码:   Event  =  new  clReceivelDllPoxy.TDataEvent(getDate);   ReceDllPoxy.AddServer(1024,  Event,  2);   其中  Event是上面委托的实例,我定义成一个成员这样就不会被自己释放   下面是C#中回调函数的实现 public  void  getDate(byte[]  AData,  int  ALen) { //发现每次回调是  AData只有一个字节 }   下面转载一个别人的代码,谢谢 using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; using System.Reflection; using System.Reflection.Emit; namespace AppDllTest {   /**//// summary   /// 非托管动态调用基类,基类不能直接使用,需要实现 FunTable()的虚函数   /// /summary   public abstract class clDllBasePoxy   {     //-装入DLL---------     public bool Open(string dllFileName)     {       Hand = LoadLibrary(dllFileName);       if (Hand == 0)       {         return false;       }       FunSet(GetFunTable());       return true;     }      //-关闭DLL---     public bool Close()     {       return FreeLibrary(Hand)!=0;     }     public abstract string[] GetFunTable(); //函数对应表由外部代理类通过 GetFunTable来设置     //调用Windows32下的Kernele32库中的装入函数来完成对非托管DLL的引用-------#region //调用Windows32下的Kernele32库中的装入函数来完成对非托管DLL的引用-------     //--------------------------------------------------------------     [DllImport(Kernel32)]     private static extern int GetProcAddress(int handle, String funcname);     [DllImport(Kernel32)]     private static extern int LoadLibrary(String funcname);     [DllImport(Kernel32)]     private static extern int FreeLibrary(int handle);     private int Hand = 0; //DLL的句柄     private static Delegate GetAddress(int dllModule, string functionname, Type t) //把指针转变成C#的代理     {       int addr = GetProcAddress(dllModule, functionname);       if (addr == 0)       {         return null;       }       else       {         return Marshal.GetDelegateForFunctionPointer(new IntPt

文档评论(0)

sandaolingcrh + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档