C# 从cmake项目生成用于Unity的.dll 我在VisualStudio 15中运行了一个C++项目,其中包含OpenCV特性。我的目标是在Unity项目中执行该项目中的方法。我已经看过了编写本地插件和封送处理,我得到了一个几乎空的C++项目,它被构建成.dll,并成功地在Unity中使用它来调用库函数。

C# 从cmake项目生成用于Unity的.dll 我在VisualStudio 15中运行了一个C++项目,其中包含OpenCV特性。我的目标是在Unity项目中执行该项目中的方法。我已经看过了编写本地插件和封送处理,我得到了一个几乎空的C++项目,它被构建成.dll,并成功地在Unity中使用它来调用库函数。,c#,c++,visual-studio,opencv,unity3d,C#,C++,Visual Studio,Opencv,Unity3d,C# C++ #包括 #定义DllExport\uuu declspec(DllExport) 外部“C”{ DllExport int GetRandom(){ 返回rand(); } } 结果在Unity日志中打印出一个随机数,因此基础工作正常 我的问题是,如果我想使用OpenCV,我必须使用Cmake(GUI)来生成一个C++项目,从中我不能构建一个我可以使用的.dll。 我已经将Configuration Properties->General->Project Defaults->C

C#

C++

#包括
#定义DllExport\uuu declspec(DllExport)
外部“C”{
DllExport int GetRandom(){
返回rand();
}
}
结果在Unity日志中打印出一个随机数,因此基础工作正常

<>我的问题是,如果我想使用OpenCV,我必须使用Cmake(GUI)来生成一个C++项目,从中我不能构建一个我可以使用的.dll。 我已经将
Configuration Properties->General->Project Defaults->Configuration Type
设置为.dll,但是在构建时,它会显示
Project未选择为此解决方案配置构建

我已经读到,我还必须在Configuration Manager中选中“Deploy”,但我认为这不是真的,因为在OpenCV项目中,以及在我的小项目中,在这两种情况下,“Deploy”列都会变灰并取消选中


要将OpenCV项目构建为.dll,我必须做什么?可能是我在CGED中设置的,或者是VisualStudio中的一些东西,我想。

……如果我想使用OpenCV,我必须使用Cmake(GUI)来生成C++项目……-为什么?您能给我们看一下您的
CMakeLists.txt
?或者你的意思是你通常不使用CMake来生成你的MSVS解决方案?我必须从源代码构建CMake,以便能够使用我需要的contrib功能,并为所有选项设置我需要的方式。我经常使用CMake。好的。那么您是否也将CMake用于上述DLL?您是否仅在该DLL中使用OpenCV存在问题(这意味着设置适当的包含和库搜索路径,并指定要链接的OpenCV库)?或者您也在尝试设置它,以便将OpenCV自动构建(如果它不存在)作为DLL解决方案的一部分?或者别的什么?我已经在一个应用程序项目中设置并运行了OpenCV。我现在希望该项目的方法由Unity执行。要做到这一点,我需要将C++应用程序构建为一个动态库,从中可以调用C语言中的方法,如上面所示。我使用CMake构建OpenCV,并使用CMake构建使用OpenCV的项目。include dir等设置正确,因为它们都在VisualStudio中作为可执行文件工作。我假设我必须将该应用程序项目转换为库项目,但我不确定如何做,以及这是否是最好的方法。我看不出您为什么要转换该项目。您已经有了上面显示的一些基线DLL。只需将所有cpp/hpp文件以及所需的代码添加到DLL项目中。在DLL上设置includes/库,并将其与OpenCV链接。如果您想做得更好,那么创建一个额外的(静态)库,并将公共位移到那里。然后,你将你的EXE和DLL链接到新的LIB。“……如果我想使用OpenCV,我必须使用Cmake(GUI)来生成C++项目……-为什么?您能给我们看一下您的
CMakeLists.txt
?或者你的意思是你通常不使用CMake来生成你的MSVS解决方案?我必须从源代码构建CMake,以便能够使用我需要的contrib功能,并为所有选项设置我需要的方式。我经常使用CMake。好的。那么您是否也将CMake用于上述DLL?您是否仅在该DLL中使用OpenCV存在问题(这意味着设置适当的包含和库搜索路径,并指定要链接的OpenCV库)?或者您也在尝试设置它,以便将OpenCV自动构建(如果它不存在)作为DLL解决方案的一部分?或者别的什么?我已经在一个应用程序项目中设置并运行了OpenCV。我现在希望该项目的方法由Unity执行。要做到这一点,我需要将C++应用程序构建为一个动态库,从中可以调用C语言中的方法,如上面所示。我使用CMake构建OpenCV,并使用CMake构建使用OpenCV的项目。include dir等设置正确,因为它们都在VisualStudio中作为可执行文件工作。我假设我必须将该应用程序项目转换为库项目,但我不确定如何做,以及这是否是最好的方法。我看不出您为什么要转换该项目。您已经有了上面显示的一些基线DLL。只需将所有cpp/hpp文件以及所需的代码添加到DLL项目中。在DLL上设置includes/库,并将其与OpenCV链接。如果您想做得更好,那么创建一个额外的(静态)库,并将公共位移到那里。然后将exe和dll链接到新库。
public class Controller : MonoBehaviour {
    [DllImport("DllName")]
    private static extern int GetRandom();
    void Start () {
        print(GetRandom());
    }
}
#include <iostream>
#define DllExport __declspec (dllexport)
extern "C" {
    DllExport int GetRandom() {
        return rand();
    }
}