zoukankan      html  css  js  c++  java
  • C#使用MonoPInvokeCallback,让C直接回调C#函数

    Test.mm

    char* TestMakeCString(NSString *str) {
        const char* string = [str UTF8String];
        if (string == NULL) {
            return NULL;
        }
        
        char* res = (char*)malloc(strlen(string) + 1);
        strcpy(res, string);
        return res;
    }
    extern "C"{ typedef void (*TestCallback)(const char*eventName); TestCallback _myCallback; void _TestInit(TestCallback callback){ _myCallback=callback; } } @implementation Test -(void) test{ _myCallback(TestMakeCString(@"complete")); } @end

    Test.cs

    using System.Runtime.InteropServices;
    public class Test{
        public delegate void EventHandler(string eventName, string msg);
        public event EventHandler callbackHandler;
        
        internal delegate void TestCallBack(string eventName);
        [DllImport("__Internal")]
        private static extern void _TestInit(TestCallBack callback);
        
        [MonoPInvokeCallback(typeof(TestCallBack))]
        public static void onCallBack(string eventName){
            if(eventName=="complete"){
                //do something
                if(callbackHandler!=null)callbackHandler(eventName,"HIJK");
            }
        }
    
         public static Test _instance;
         public static Test getInstance(){
           if(_instance==null){
               _instance=new Test();
           }
           return _instance;
          }
            
        //初始接口
        public void init(){
            _TestInit(onCallBack);
        }
    
    }

    demo:

    Test test=Test.getInstance()
    test.init();
    test.callbackHandler+=handler;
    
    void handler(string eventName,string msg){
      //do something
    }
  • 相关阅读:
    P1199三国游戏(博弈论)
    平方求和
    完全立方公式
    P1414 又是毕业季(数论)
    P1514 引水入城(搜索+线段完全覆盖)
    树莓派利用Django搭建聊天网页服务器 —— 准备篇
    树莓派下安装Django环境
    Linux终端光标消失问题
    OpenCV 简介
    树莓派是什么?能干什么?和单片机有什么区别?
  • 原文地址:https://www.cnblogs.com/kingBook/p/6723620.html
Copyright © 2011-2022 走看看