一、在c++工程中调用vc 2019下创建的动态链接库dll。
首先在VC2019下创建动态链接库项目。这个步骤可以参考这位大神博主的步骤。 https://blog.csdn.net/qq_30139555/article/details/103621955 然后要注意的事项有以下几点,我说明一下。
1、动态链接库按照上述链接创建好后,最后一步编译要点击上方菜单中的 “生成” 里的 “生成解决方案” 。
2、注意动态链接库编译的环境和调用动态链接库的环境要一致 因为是在新建的c++项目中调用动态链接库,所以这里项目的环境要一样,也就是动态链接库的环境和调用动态链接库项目的环境要一致。比如下方的我动态链接库的编译环境是x86的,那么调用它的项目环境也要是x86的!!一定要一致!!!!不然会报expected x64 architecture, but was x86 architecture. You must recompile your plugin for x64 architecture.翻译过来就是 “预期是x64架构,但却是x86架构。你必须为x64架构重新编译你的插件。”然后你就需要重新再走一遍操作了。 3、如果修改了动态链接库中的函数功能,再重新编译,然后在c++工程中调用会报错或者说无法调用成功。 解决办法:我目前的理解是需要先将之前添加到 “c++调用工程“ 里的对应文件都先删除再重新添加进来。如果还没用,重走一遍流程吧哈哈哈,刚试验完还不太熟练。
二、在unity中调用c++创建的动态链接库dll
1、首先创建好动态链接库,上面的链接中详细讲解了如何创建。但是要注意编译的时候要选择环境x64的来编译,因为我的unity中调用的环境默认是x64位的,所以为了能调用,必须让其环境一致。 下面这个是我的动态链接库编译环境。 2、编译成功后,我们创建一个Unity工程,然后再把编译生成的dll文件拖到你的unity工程的Assert的Plugins(如果没有这个文件夹,需要手动新建)。这里我是需要手动创建的。然后将我编译好的dll文件加进来。
3、手动创建一个cs文件。在里面编写代码调用动态链接库。再将这个cs文件挂载到Main Camera上。然后在unity里运行,打印区域不报错并显示预期的函数结果说明调用成功啦!我在测试的时候显示了环境不一致和无法找到dll库,那么需要在相同环境下重新编译动态链接库,就没问题啦!
using System.Collections; using System.Collections.Generic; using System.Runtime.InteropServices; using UnityEngine;
public class testunitydll : MonoBehaviour {
[DllImport("TestUnityDll")] //这里的dll文件名根据自己的修改
private static extern int add(int a, int b); //这里是我封装的方法。根据自己的修改
int i = add(3, 5);
void Start()
{
print(i);
}
|