首页 > 编程语言 >在Unity中使用C#调用C++动态链接库(DLL)

在Unity中使用C#调用C++动态链接库(DLL)

时间:2022-11-29 09:37:46浏览次数:59  
标签:C# C++ DLL int Unity 动态链接库 using

 

在Unity中使用C#调用C++动态链接库(DLL)

https://blog.csdn.net/qq_51456342/article/details/125693678

 

[FNote:  属性页中无C++项时, 要先写点代码编译一下,就有了]

在Unity中使用C#调用C++动态链接库(DLL)

辉哥威武

已于 2022-07-09 16:58:42 修改

1618
收藏 1
分类专栏: Unity游戏开发 文章标签: unity c# c++
版权

Unity游戏开发
专栏收录该内容
3 篇文章1 订阅
订阅专栏
一、创建C++动态链接库(DLL)
二、将Dll库在Unity工程中调用二、将Dll库在Unity工程中调用@TOC

一、创建C++动态链接库(DLL)
1、创建一个C++的空项目(如下图)
创建一个C++的空项目:

2、配置项目属性为动态链接库
右键项目属性打开配置文件的输出类型为类库【配置属性】-》【常规】配置类型—动态库(.dll)


3、简单写点代码
3.1 添加头文件(.h)
头文件 AddOperate.h。

#pragma once
extern "C" _declspec(dllexport) int Sum(int a, int b);
class AddOperate
{
public:
};
1
2
3
4
5
6
3.1 添加源文件(.cpp)
源文件 AddOperate.cpp。

#include "AddOperate.h"
#include "iostream"
using namespace std;

int Sum(int a, int b)
{
if (a - (int)a != 0 || b - (int)b != 0) {
cout << "请输入整数" << endl;
return -1;
}
return a + b;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
4、右键项目点击生成即可生成DLL文件
在项目的Debug目录下即可找到生成的DLL文件

二、将Dll库在Unity工程中调用
1、创建一个Unity工程:
2、新建一个文件夹命名为Plugins:
3、将之前生成的动态链接库放到Plugins文件夹下,如下图所示:


4、新建一个Test.cs测试脚本调用C++代码:
下面展示一些 Test.cs。

using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Runtime.InteropServices;
using UnityEngine;
public class Test : MonoBehaviour
{

void Start()
{
Add(3, 4);
}

[DllImport("CPPDll2.dll", CallingConvention = CallingConvention.Cdecl)]
extern static int Sum(int a, int b);
public void Add(int a,int b)
{
UnityEngine.Debug.Log("调用C++代码计算a + b的结果为" + Sum(a,b));

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
运行结果:

————————————————
版权声明:本文为CSDN博主「辉哥威武」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_51456342/article/details/125693678

标签:C#,C++,DLL,int,Unity,动态链接库,using
From: https://www.cnblogs.com/okgogo2000/p/16934435.html

相关文章

  • 我的书《ASP.NET Core技术内幕与项目实战》早就出版了
    我的“新”书《ASP.NETCore技术内幕与项目实战》已经在7月份就出版了,不过恰逢我这几个月一直很忙,所以一直没宣传,特别是这个公众号我都没发过一次。就把这次当成一个正式的......
  • Acwing100 增减序列
    给定一个长度为n的数列每次可以选择一个区间 使每个数都加一或者都减一。 求至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到......
  • 3.5 Docker最新入门教程-Docker入门-持久化数据库
    3.5持久化数据库您是否注意到,每次我们启动容器时,我们的待办事项列表都会被清除干净。为什么是这样?让我们深入了解容器的工作原理。容器的文件系统当容器运行时,它使用镜......
  • 为什么memcpy中要指定const void *
    voidcopyBytes(char*x,char*y,inthowMany)首先是你的指针char*,这意味着除了char*需要显式转换之外的任何指针类型.您应该使用void*,隐式转换指针类型.uint16_......
  • ClickHouse 数据一致性
    查询CK手册发现,即便对数据一致性支持最好的Mergetree,也只是保证最终一致性:我们在使用ReplacingMergeTree、SummingMergeTree这类表引擎的时候,会出现短暂数据不一致的情......
  • C语言中 char s[] 和 char* s 的区别
    chars[]和char*s的区别1、数组本质2、指针指针的指向3、字符数组4、char*与chara[]5、char**和char*a[]char*a[]char**sC语言指针可......
  • 多版本 Python 使用 pip 安装 package 问题
    最简单的方式使用参数指定安装路径:pipinstall-tD:\python3.5(32bit)\Lib\site-packagesnumpy叨叨叨如果电脑上安装了多个版本的Python的话,在需要使用pip安装新pac......
  • 深入理解css 笔记(完)
    一个网站,从看起来还可以,到看起来非常棒,差别在于细节。在实现了页面里某个组件的布局并写完样式之后,不要急着继续,有意识地训练自己,以挑剔的眼光审视刚刚完成的代码。如果增......
  • 第八章 Service和Ingress
    1Service资源的基础应用1.1创建Service资源创建Service对象的常用方法有两种:一是直接使用"kubectlexpose"命令;另一种是使用资源配置文件,它与此前使用的资源清单文......
  • SpringCloud Alibaba(三) - GateWay网关
    1、基本环境搭建1.1依赖<!--Gatway网关会和springMvc冲突,不能添加web依赖--><dependency><groupId>org.springframework.boot</groupId><artifactI......