unity 调用C++ dll 操作升级套娃函数调用

这篇具有很好参考价值的文章主要介绍了unity 调用C++ dll 操作升级套娃函数调用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

之前一直以为C++生成dll,在unity中调用时要把传出去的值设置在主函数中,以参数或反回值的形式。

当然在DLL工程中可以说没有主函数,那个可以运行一个函数,其会调用其他函数从而一直调其他相关函数。

那问题是在层级是二或三------时被调用的那个函数的计算结果怎么能生成dll在unity用呢??

方案一,将需要的计算结果通过--------------在运行主函数时以参数或返回值的结果呈现肯定可以。

unity 调用C++ dll_unity调用c++封装的dll 非常卡_天人合一peng的博客-CSDN博客

但问题有时c++工程比较庞大,真的很难将需要的计结果直接以参数或返回值以主函数为载体呈现。

于是,我想那不管了,直接从想要计算结果的那导出函数和计算结果可以吗?如果可行那就简单多了。

方案二,通过测试可行。

C++工程

所有文件如下

unity 调用C++ dll 操作升级套娃函数调用,unity,C#,c++,开发语言

 Fun01.h

#pragma once
#include <iostream>
int calAdd(int a, int b);

Fun01.cpp

#include <iostream>


extern "C" __declspec(dllexport)
int calMul(int a, int b, int* ptr)
{
	int arrayValue[2] = { 4, 8};

	memcpy(ptr, arrayValue, sizeof(int)*2);
	return a * b;
}


int calAdd(int a, int b)
{
	int c = calMul(a, b, &a);
	
	std::cout << "hello" << std::endl;
	return a + b;
}

DllU3d01.cpp

// DllU3d01.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>

#include "Fun01.h"
int main()
{

    //std::cout << "Hello World!\n";
    std::cout << calAdd(4, 5) << std::endl;
}
// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单

// 入门使用技巧: 
//   1. 使用解决方案资源管理器窗口添加/管理文件
//   2. 使用团队资源管理器窗口连接到源代码管理
//   3. 使用输出窗口查看生成输出和其他消息
//   4. 使用错误列表窗口查看错误
//   5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
//   6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件

现在验证如果不在主函数传值,直接从calMul函数导出可以不?

生成dll

unity 调用C++ dll 操作升级套娃函数调用,unity,C#,c++,开发语言

 unity工程添加脚本

unity 调用C++ dll 操作升级套娃函数调用,unity,C#,c++,开发语言

 useDll.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Runtime.InteropServices;


public class useDll : MonoBehaviour
{
    [DllImport("D:\\BUFFER\\Unity\\DLLProject01\\Assets\\VSDLL\\DllU3d01")]
    static extern int calMul(int a, int b, int[] x);

    private int[] x = new int[2];
    int vsValue = 0;

    // Start is called before the first frame update
    void Start()
    {
        vsValue = calMul(23, 11, x);
        print(vsValue);
        print("-------------------************----------------");

        for (int i = 0; i < 2; i++)
        {
            print(x[i]);
        }
        //Console.WriteLine("hello");

    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

将上面VS生成的dll放在到unity Assets下的VSDLL文件夹中

unity 调用C++ dll 操作升级套娃函数调用,unity,C#,c++,开发语言

 在这种情况下,可以直接写

[DllImport("DllU3d01")]

双引号是dll的名字,只是不写后缀

运行程序

unity 调用C++ dll 操作升级套娃函数调用,unity,C#,c++,开发语言

 还真可以。

但同时面临一个新问题,实际上a,b的值是多少,我们是无法从unity中给的。

所以,可以将变量全变为全局的,然后将main函数体的运算可以根据情况分成多个子函数导出dll,即只要符合main函数的逻辑,前一部分运行完后,进行后一部分且要用前一部分运算后的结果,这样可以解决上述问题。文章来源地址https://www.toymoban.com/news/detail-647761.html

到了这里,关于unity 调用C++ dll 操作升级套娃函数调用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity调用dll踩坑记

    请用写一段代码,让unity无声无息的崩溃。 你说这怕是有点难哦,谁会这么不幸呢?不幸的是,我幸运的成为了那个不幸的人。 unity里面调用dll的方式是使用 DllImport ,比如有一个 Hello.dll,里面有一个 char* Greet(char* name) 的方法。将 Hello.dll 放入Unity的Plugins目录下,如果没有就

    2024年04月17日
    浏览(52)
  • c++动态调用dll

    在C++中动态调用DLL(动态链接库)可以使用Windows API函数。以下是一个简单的示例,演示如何动态加载和调用DLL中的函数: 在上面的示例中,我们首先使用LoadLibrary函数加载DLL。然后,使用GetProcAddress函数获取要调用的函数的指针。在本例中,我们假设要调用的函数名为\\\"MyFu

    2024年01月24日
    浏览(36)
  • C#调用C++ dll教程

    在使用C#开发客户端时,有时需要调用C++ dll,本篇博客来介绍C#程序如何调用C++ dll。 首先使用VS2022创建C++ dll项目,具体步骤如下: (1)选择Windows桌面向导,点击下一步, 取项目名,例如我的dll项目名是libMath (2)选择动态项目,勾选导出符号 (3)编写动态代码,代码如下

    2024年01月25日
    浏览(42)
  • c++注入dll调用call

    1.先写个我们要调用的函数 这个我们写了一个很简单的函数,一个main函数和test函数。我们后面要通过动态注入dll调用这个test函数。 我们先运行一下。看看结果 输入这个,看了没有任何问题。 2.写一个简单的dll 我们在vs2019创建一个dll文件,在DLL_PROCESS_ATTACH下面加一行语句。

    2024年02月03日
    浏览(44)
  • Unity调用Windows弹框(User32.dll/System.Windows.Forms.dll)

    在开发 PC 端项目时,有时我们需要提醒用户进行相关操作 / 提示用户下一步该如何操作 那么我们就需要与 Windows 进行交互,来告诉 Windows 弹个框出来 去提醒用户,确认/取消 是/否  这里有两种方法: 1.调用User32.dll外部库,实现弹框   2.调用System.Windows.Forms.dll 外部库,实现

    2024年02月13日
    浏览(41)
  • C#调用C++ dll异常排查

    最近在做的一款程序,长时间运行总会出现莫名的问题。有时是自动关闭,有时程序报错,有时调用的dll异常…… 由于开始与C++组合作时,使用其提供的dll出现过数据读写时异常(内存操作异常),于是怀疑他们提供的dll有内存泄漏。于是想通过日志或其它方法来确认这个猜

    2024年01月21日
    浏览(55)
  • C++调用C# dll成功示例

    一.准备C# dll类库 。生成CSLib.dll  二、写C++应用调用  1)需要把dll复制到运行目录下。(不然会提示找不到dll System.IO.FileNotFoundException:“未能加载文件或程序集“CSLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”或它的某一个依赖项。系统找不到指定的文件) 2)设置\\\"公共语言运

    2024年02月14日
    浏览(61)
  • 详述C++ 调用opencv编译成dll并调用的全过程

     其中,extern \\\"C\\\":告诉编译器将被它修饰的代码按C语言的方式进行编译。             __declspec(dllexport):告诉编译器和链接器被它修饰的函数或变量需要从DLL导出,以供其他应用程序使用;与其相对的还有一句代码是__declspec(dllimport),此修饰符的作用是告诉编译器和链接

    2024年02月04日
    浏览(56)
  • VS2015项目中,MFC内存中调用DLL函数(VC6生成的示例DLL)

    本例主要讲一下,用VC6如何生成DLL,用工具WinHex取得DLL全部内容,VC2015项目加载内存中的DLL函数,并调用函数的示例。         本例中的示例代码下载,点击可以下载 1.新建项目,这里选择Win32 Dynamic-link Library,如下图:  2.选择“A simple DLL project”,然后点击完成,如下:

    2024年02月12日
    浏览(47)
  • 使用Rider C# Dll工程和Unity工程互相调用、断点方法

    创建C# Dll工程,生成C#工程Dll 创建Unity工程 Unity调用C#工程的代码 C#工程调用Unity工程的代码 断点方法 创建工程 选这个,注意UnityEngineDll这个选项,要选你目标unity版本的Dll 生成Dll 右键工程 简单,能看到这篇文章的都是优秀的同学,所以,此步略过 下面这两个复制到unity工程

    2024年01月20日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包