• [C++]unity调用c++


    参考链接:

    https://www.jianshu.com/p/65bb18513f19

    https://www.cnblogs.com/0kk470/p/10607544.html

    1.在vs中新建一个c++空项目

    TestCPlus.h

    #pragma once
    #define _DllExport _declspec(dllexport) //_declspec(dllexport)用于将该函数标记为导出函数
    
    extern "C" //让该区域的代码作为C语言来编译,避免C++编译时因函数重载令函数名改变而导致C#调用的时候找不到该函数
    {
        _DllExport int CPlus_Add(int a, int b);
    }

    TestCPlus.cpp

    #include "TestCPlus.h"
    
    extern "C"
    {
        int CPlus_Add(int a, int b)
        {
            return a + b;
        }
    }

    2.生成dll后,放到Assets\Plugins\x86_64下

    a.运行时可能会提示需要64位dll

    在生成dll时选择64位即可

    b.生成dll时可能会报错

    解决方法为,设置配置类型为dll

    3.编写脚本进行测试

    TestCPlusDLL.cs

     1 using System.Runtime.InteropServices;
     2 using UnityEngine;
     3 
     4 public class TestCPlusDLL : MonoBehaviour
     5 {
     6     [DllImport("TestCPlus")]
     7     private static extern int CPlus_Add(int a, int b);
     8 
     9     [DllImport("TestCPlus", EntryPoint = "CPlus_Add")]
    10     private static extern int Add(int a, int b);
    11 
    12     void Start()
    13     {
    14         int a = 5;
    15         int b = 6;
    16         Debug.Log(CPlus_Add(a, b));
    17         Debug.Log(Add(a, b));
    18     }
    19 }

    输出如下。这2个extern修饰的方法对应dll中的CPlus_Add方法,两者的区别在于,是否指定了EntryPoint。EntryPoint参数指明了从dll中调用的方法名,如果未指明,则会调用同名的方法。本例中,两者调用的都是c++中的CPlus_Add

    如果去掉EntryPoint参数,会报EntryPointNotFoundException异常:

  • 相关阅读:
    element、vue 使用
    .net bigint,long传到前端发现精度不对
    服务器工具安装
    银行分控模型的建立
    Firebase —— a readymade backend system
    PouchDB —— build applications that work as well offline
    ASP.NET 之 UserRoleIdentity
    insert conflict do update
    【PostgreSQL数据库】PostgreSQL数据库gdb调试子进程
    mac禁用chrome左右双指滑动手势返回上一页
  • 原文地址:https://www.cnblogs.com/lyh916/p/15681164.html
Copyright © 2020-2023  润新知