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模板网!

原文地址:https://blog.csdn.net/moonlightpeng/article/details/131741064

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

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

相关文章

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包