MonoPInvokeCallback用法,C调用C#,并在unity调用

1.写NativeCode.c文件

#include <stdio.h>
//#include <string>

#include <android/log.h>
#define DEBUG 1 //日志开关,1为开,其它为关
#if(DEBUG==1)
#define LOG_TAG "XHSJ_JNI"
#define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE,TAG,__VA_ARGS__)
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)
#else
#define LOGV(...) NULL
#define LOGD(...) NULL
#define LOGI(...) NULL
#define LOGE(...) NULL
#endif


typedef struct Parameter {
    int a;
    int b;
} Param;


typedef void (*CallBack)(Param* p);

void TestFunc(CallBack cb){
    Param p;
    p.a = 10;
    p.b = 20;
    LOGE("a = %d ; b =  %d\n",p.a,p.b);
    cb(&p);
}

2.编译为libnative.so文件

如何编译参考https://blog.csdn.net/yhx956058885/article/details/105654224

3.unity调用,绑定button调用Click_TestFunc

using UnityEngine;
using System.Runtime.InteropServices;
using System;
using AOT;

public class NewBehaviourScript : MonoBehaviour {

    [StructLayout(LayoutKind.Sequential)]
    struct Parameter
    {
        public int a;
        public int b;
    }

    delegate void CallBack(IntPtr param);

    [DllImport("native")]
    static extern void TestFunc(CallBack cb);

    [MonoPInvokeCallback(typeof(CallBack))]
    static void CallBackFunc(IntPtr param)
    {
        Parameter p = (Parameter)Marshal.PtrToStructure(param, typeof(Parameter));
        Debug.Log("a:" + p.a + " b:" + p.b);
    }

    public void Click_TestFunc()
    {
        TestFunc(CallBackFunc);
    }
}

4.logcat查看打印信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jack Yan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值