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
    }
  • 相关阅读:
    Guns 01 项目基本运行
    个人 比较好用的软件
    个人 软件开发 综合技能提升
    开源框架 综合知识
    开源框架 工作流框架
    开源框架 Java 开发框架 1
    开源框架 Java 管理系统
    开源框架 C#
    scp(安全拷贝)和rsync(增量复制)
    完全分布式集群的准备工作
  • 原文地址:https://www.cnblogs.com/kingBook/p/6723620.html
Copyright © 2011-2022 走看看