1, vs中生成dll

对应的生成dll的cpp如下

#include<opencv2/opencv.hpp>
#include "opencv2/core/core.hpp"
#include "opencv2/imgproc/imgproc.hpp"
using namespace cv;#define EXPORT_API __declspec(dllexport)VideoCapture my_camera;
int width = 640;
int height = 480;extern "C" bool EXPORT_API openCamera()
{bool my_open = false;while (!my_camera.isOpened()){std::cout << "Cannot open the camera!" << std::endl;my_camera.open(0);//一个接口能同时打开两个摄像头}my_camera.set(CV_CAP_PROP_FRAME_WIDTH, width*2);my_camera.set(CV_CAP_PROP_FRAME_HEIGHT, height);if (my_camera.isOpened()){my_open = true;}return my_open;
}extern "C" void   EXPORT_API recieveFrame(uchar* texturePtr)
{Mat my_frameBGR;Mat my_frameRBG;my_camera >> my_frameBGR;if (my_frameBGR.data){cvtColor(my_frameBGR, my_frameRBG, CV_BGR2RGB);memcpy(texturePtr, my_frameRBG.data, my_frameRBG.cols*my_frameRBG.rows*my_frameRBG.channels()*sizeof(uchar));}}extern "C" void EXPORT_API closeCamera()
{if (my_camera.isOpened()){my_camera.release();}
}

2, unity中justatry脚本

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System;
using System.Runtime.InteropServices;用 c++中 dll 文件需要引入public class justatry : MonoBehaviour {[DllImport("_dectecting")]public static extern bool openCamera();[DllImport("_dectecting")]public static extern bool recieveFrame(byte[] imageData);[DllImport("_dectecting")]public static extern bool closeCamera();public bool IsOpen = false;public byte[] imageData;public Texture2D tex;public int Width = 640;public int Length = 480;// Use this for initializationvoid Start () {IsOpen = openCamera();if(IsOpen){imageData = new byte[Length * Width * 3*2];tex = new Texture2D(Width*2, Length, TextureFormat.RGB24, false);}}// Update is called once per framevoid Update () {if (IsOpen){recieveFrame(imageData);tex.LoadRawTextureData(imageData);tex.Apply();GetComponent<Renderer>().material.mainTexture = tex;}}void CloseCamera(){if (IsOpen){closeCamera();}}public void OnApplicatoinQuit(){closeCamera();}
}using System.Runtime.InteropServices;用 c++中 dll 文件需要引入public class justatry : MonoBehaviour {[DllImport("_dectecting")]public static extern bool openCamera();[DllImport("_dectecting")]public static extern bool recieveFrame(byte[] imageData);[DllImport("_dectecting")]public static extern bool closeCamera();public bool IsOpen = false;public byte[] imageData;public Texture2D tex;public int Width = 640;public int Length = 480;// Use this for initializationvoid Start () {IsOpen = openCamera();if(IsOpen){imageData = new byte[Length * Width * 3*2];tex = new Texture2D(Width*2, Length, TextureFormat.RGB24, false);}}// Update is called once per framevoid Update () {if (IsOpen){recieveFrame(imageData);tex.LoadRawTextureData(imageData);tex.Apply();GetComponent<Renderer>().material.mainTexture = tex;}}void CloseCamera(){if (IsOpen){closeCamera();}}public void OnApplicatoinQuit(){closeCamera();}
}

注意,脚本要挂在plane上

3,在unity中调试则dll的输出目录是 unity项目工程名\Assets\Plugins

D:\Michael Wang\SC\2018\1\openDoublecamera\UnityTry\Assets\Plugins

4,在vs中调试则

4.1 把unity的工程生成对应的exe

这是生成的unity exe对应的生成目录

对应的目录如

D:\Michael Wang\SC\2018\1\openDoublecamera\UnityTry\test.exe

4.2 在vs项目的属性中做如下设置

命令后用上面的路径,注意是放在命令里不是命令参数里

在对应的unity exe目录中找到 unity工程名_Data下Plugins的目录是

D:\Michael Wang\SC\2018\1\openDoublecamera\UnityTry\test_Data\Plugins

4.3 在VS工程的属性中的输出目录设置为上面的目录

做完以上设置就直接可以在VS下调试了。

5 注意vs和unity的平台x86/x64要对应

5.1 vs x86/x64

5.2 unity

5.3, 如果按以上设置还是不对,提示找不到dll,则把dll的输出放在与Plugins或Assets文件夹同一级尝试。

如果你已经把dll放在这里了,还是显示找不到,则一定是你用vs生成dll的库没有在环境变量里,然后unity里面调用时找不到vs生成dll所依赖的一些库。可以把一些你知道的库直接放在vs生成的dll一起,全放在unity工程里,应该就好了。

unity调用dll打开双目相关推荐

  1. unity 调用 .dll 或 .so时遇到的问题

    1.32位的 .dll 无法在64位的unity编辑器下运行. System.DllNotFoundException: xxx  , 64位的程序运行32位的dll是会报这种错 2.Failed t ...

  2. Unity调用UniWebView打开H5界面脚本

    using System; using System.Collections; using System.Collections.Generic; using UnityEngine; //***** ...

  3. Unity调用动态链接库dll和so

    [001]Unity调用动态链接库dll和so  ApolloAR https://www.jianshu.com/p/f37bb72979a1 一.PC平台 (注:环境 VS2017+Unity20 ...

  4. dll放在unity哪个文件夹下_unity中调用dll文件总结

    unity中调用dll文件总结 根据收集的资料,对unity中调用dll文件进行总结,目前常用的两种,在给出vs中封装dll文件的步骤. 一.调用c#中的dll文件 1.1封装dll文件 首先新建一个 ...

  5. unity 调用C#类将文字转换为语音

    以前做语音的时候都是调用事先录制好的音频来进行播放,但是这样太不方便,而且即使是动态加载也会使压缩包体积大大加大,今天终于找到了一个调用类就可以实现将文字转换成语音状态: 在VS的引用中右键引用COM ...

  6. Unity调用android相册获取图片或视频

    Unity调用android相册获取图片或视频 (此文章对有unity基础和对环境配置有基础的童嚡容易看懂) 因为项目上用到,在百度了很多大佬的文章后,陆陆续续踩了很多坑,可能是我哪里设置的不对,大部 ...

  7. 转【C#调用DLL的几种方法,包括C#调用C\C++\C#DLL】

    C#中dll调用方法 一.      DLL与应用程序 动态链接库(也称为DLL,即为"Dynamic Link Library"的缩写)是Microsoft Windows最重要 ...

  8. C#程序实现动态调用DLL的研究(转)

    摘 要:在<csdn开发高手>2004年第03期中的<化功大法--将DLL嵌入EXE>一文,介绍了如何把一个动态链接库作为一个资源嵌入到可执行文件,在可执行文件运行时,自动从资 ...

  9. VS2013环境生成和调用DLL动态链接库

    创建动态库方法: 创建动态库是生成 .dll .lib 两个个文件 文件 -> 新建 -> 项目 -> win32控制台应用程序 项目名称:DLLGenerator 应用程序类型:D ...

  10. C++ Builder创建和调用dll中的资源

    程序开发中经常会用到一些图标.图片.光标.声音等,我们称它们为资源(Resource).当多个窗口用到同样的资源时,可以将这些公共的资源放到一个dll文件里调用,这样,由于定位资源比在磁盘中定位文件花 ...

最新文章

  1. 第八天-《企业应用架构模式》-通盘考虑
  2. 在进入新版本 的时候,进行推送引导
  3. Java中测长函数_Core Java测试题
  4. VTK:图片之ImageToStructuredPoints
  5. Java中的Scanner类和String类
  6. pringMVC“Ambiguous mapping found. Cannot map 'XXXController' bean method”解决方法
  7. Linux网络编程--文件描述符
  8. 实时导出正在运行的虚拟机或检查点
  9. 《疯狂Java讲义》(七)---- 方法
  10. c语言语法分析常见问题,C语言语法提要与常见错误分析.doc
  11. The Beauty of DirectX 11 (3) --- constant buffer, buffered/structure buffer
  12. 正确的座机号码格式_简历里的手机号及座机号的标准写法是什么?正确书写才更可能求职成功!...
  13. 【52】NVMe暴力热插拔对系统的要求
  14. 2022-2028全球新冠检测试剂行业调研及趋势分析报告
  15. 抢不到回家的票,还真不是12306技术不行
  16. 【观察】打造智能决策“新引擎”,杉数科技勇闯“无人区”
  17. solidworks批量图号分离_SolidWorks2014基于宏实现快速图号名称分离.docx
  18. AI工具是帮手还是助手:
  19. 如何理解结构化、非结构化和半结构化数据?
  20. c3po数据库连接池简单配置

热门文章

  1. android最贵的手机,2019翻盖手机排行榜_2019年最贵的手机有哪些?最贵手机排行榜...
  2. java语言实现_java语言实现树
  3. alter在mysql_MySQL的alter的使用
  4. sqlplus几个存储过程执行变量值窜掉了_单片机必知的数据存储与程序编写知识!...
  5. 在VIM中使用GDB调试 – 使用pyclewn
  6. adb 连接时候不弹出授权对话框
  7. RHEL7中设置ssh
  8. Juniper MIP
  9. ARM处理器是有益补充
  10. 简单调用exe的方法