Test.mm

  1. char* TestMakeCString(NSString *str) {
  2. const char* string = [str UTF8String];
  3. if (string == NULL) {
  4. return NULL;
  5. }
  6.  
  7. char* res = (char*)malloc(strlen(string) + );
  8. strcpy(res, string);
  9. return res;
  10. }
  11. extern "C"{
  12. typedef void (*TestCallback)(const char*eventName);
  13. TestCallback _myCallback;
  14. void _TestInit(TestCallback callback){
  15. _myCallback=callback;
  16. }
  17. }
  18.  
  19. @implementation Test
  20. -(void) test{
  21. _myCallback(TestMakeCString(@"complete"));
  22. }
  23. @end

Test.cs

  1. using System.Runtime.InteropServices;
  2. public class Test{
  3. public delegate void EventHandler(string eventName, string msg);
  4. public event EventHandler callbackHandler;
  5.  
  6. internal delegate void TestCallBack(string eventName);
  7. [DllImport("__Internal")]
  8. private static extern void _TestInit(TestCallBack callback);
  9.  
  10. [MonoPInvokeCallback(typeof(TestCallBack))]
  11. public static void onCallBack(string eventName){
  12. if(eventName=="complete"){
  13. //do something
  14. if(callbackHandler!=null)callbackHandler(eventName,"HIJK");
  15. }
  16. }
  17.  
  18. public static Test _instance;
  19. public static Test getInstance(){
  20.   if(_instance==null){
  21.   _instance=new Test();
  22.   }
  23.   return _instance;
  24. }
  25.  
  26. //初始接口
  27. public void init(){
  28. _TestInit(onCallBack);
  29. }
  30.  
  31. }

demo:

  1. Test test=Test.getInstance()
  2. test.init();
  3. test.callbackHandler+=handler;
  4.  
  5. void handler(string eventName,string msg){
  6.   //do something
  7. }

C#使用MonoPInvokeCallback,让C直接回调C#函数的更多相关文章

  1. JQuery ajax调用一直回调error函数

    使用jquery的ajax调用,发现一直回调error函数,ajax调用代码如下,后台返回是正确的,为什么会报错呢?  var descValue = $('#descEditArea').val() ...

  2. C模块回调Lua函数的两种方法

    作者:ani_di 版权所有,转载务必保留此链接 http://blog.csdn.net/ani_di C模块回调Lua函数的两种方法 lua和C通过虚拟栈这种交互方式简单而又可靠,缺点就是C做栈平 ...

  3. Python 3.X 调用多线程C模块,并在C模块中回调python函数的示例

    由于最近在做一个C++面向Python的API封装项目,因此需要用到C扩展Python的相关知识.在此进行简要的总结. 此篇示例分为三部分.第一部分展示了如何用C在Windows中进行多线程编程:第二 ...

  4. Jni本地多线程回调Java函数,env->findClass()失败。

    遇到的问题,Native层本地多线程回调Java函数时env->findClass()失败. 前面的代码是这样的在 JNI_OnLoad记录全局变量g_vm static JavaVM* g_v ...

  5. 初识代码封装工具SWIG(回调Python函数)

    这不是我最早使用swig了,之前在写Kynetix的时候就使用了swig为python封装了C语言写的扩展模块.但是当时我对C++还不是很了解,对其中的一些概念也只是拿来直接用,没有理解到底是什么,为 ...

  6. python中实现延时回调普通函数示例代码

    python中实现延时回调普通函数示例代码 这篇文章主要给大家介绍了关于python中实现延时回调普通函数的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的 ...

  7. js 利用iframe和location.hash跨域解决的方法,java图片上传回调JS函数跨域

    奶奶的:折腾了我二天,最终攻克了!网上有非常多样例. 但跟我的都不太一样,费话不多说了,上图   上代码: IE ,firefix,chrome 測试通过 js :这个主页面,部分代码, functi ...

  8. C++回调,函数指针

    想要理解回调机制,先要理解函数指针 函数指针 函数指针指向的是函数而非对象,和其他指针一样,函数指针指向某种特定的类型 函数的类型由他的返回类型和参数类型共同决定,与函数名无关,如: bool len ...

  9. 理解JS中的回调(Callback)函数

    今天写代码时写了一个函数,想实现Nodejs查询pgSQL的数据查出来并把结果作为返回值,结果发现拿不到这个值,查了下资料才恍然大悟,这是Nodejs的最大特性--非阻塞! 查询数据操作作为比较消耗资 ...

随机推荐

  1. centos7 安装pip+python3.6

    centos7安装pip 1.执行:yum install python-pip 若没有python-pip包,先执行:yum -y install epel-release,再执行yum insta ...

  2. 获取器操作都是针对数据而不是数据集的,要通过append()方法添加数据表不存在的字段

    获取器操作都是针对数据而不是数据集的,要通过append()方法添加数据表不存在的字段 public function getMembership(){ //加入会员s_id = 1 $busines ...

  3. Frobenius 范数

  4. java 获取两个日期之间的所有天数

    Calendar start = Calendar.getInstance(); start.set(2017, 2, 20); Long startTIme = start.getTimeInMil ...

  5. 把Excel选手名单信息导入到评委计分软件Access数据库的步骤

    第一步:用Excel制作选手名单 根据比赛要求,制作选手Excel名单信息,前4列要符合要求 A列:比赛顺序,整数数值类型.所以A列数值选中后,右击设置单元格格式 数字/数值/小数位数为0(见下图). ...

  6. 电商系统架构总结3(webapi授权机制)

    三 Web API 授权方式 web api的客户端,包括 android,ios,h5,自然对访问权限要加上授权机制.对于h5,要求把h5站点和web api部署在同一个域名下,然后对web api ...

  7. VMware网络桥接模式与NAT模式共存

      对虚拟机有时我们会有一种需求,即需要虚拟机可以作为单独的主机拥有自己的独立IP,也希望宿主机可以通过NAT模式映射端口到虚拟机. 那么此时怎么办那,其实很简单,虚拟机是支持多网卡设置的,只要在虚拟 ...

  8. java的list遍历

    for(String str : list) {//增强for循环,其内部实质上还是调用了迭代器遍历方式,这种循环方式还有其他限制,不建议使用. System.out.println(str); } ...

  9. angularjs探秘<三> 控制器controller及angular项目结构

    先来看一个例子 <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset=&quo ...

  10. gentoo eclipse swt

    最近学习使用 eclipse rcp 来做一些插件. 首先下载安装 eclipse-rcp,然后安装 swt emerge -av swt 安装完成以后, 在 /usr/portage/distfil ...