本机C++dll与C#项目在一个解决方案中

本文关键字:一个 解决方案 C++dll 项目 本机 | 更新日期: 2023-09-27 18:29:13

我有一个用C++编写的源文件,用于执行一些模拟。我想在C#中为此创建一个用户界面。如何在一个Visual Studio解决方案中同时使用C++和C#?

到目前为止,我所做的是创建一个.NET C#项目和解决方案,然后创建了一个作为DLL库的本机项目。我已经将C#项目标记为"依赖于"C++dll。我已经提供了必要的dllexport指令,并使用DllImport导入。一切都编译得很好,但当我执行应用程序时,找不到dll:

无法加载DLL"xxxx.DLL":找不到指定的模块。

找不到DLL并不奇怪,因为应用程序是从其输出目录运行的,C#和C++项目的输出目录不同。我不想像"..''..''Debug''xxxxxx.dll"那样写一个显式路径作为我的导入。

是否有一些常见的方法来构建一个包含原生Dll和C#应用程序的解决方案,以便C#应用程序可以调用原生Dll?

本机C++dll与C#项目在一个解决方案中

如果您知道部署后您的C++DLL将与C#DLL(或可执行文件)在同一文件夹中,那么解决问题的简单方法是使用PostBuild事件(项目属性,Build事件)。

您可以添加一个复制命令,将您的C++DLL放入C#输出文件夹。

我找到了一种非常舒适的方法,可能会有一些意想不到的缺点,但到目前为止我还没有看到任何缺点:我可以为C++DLL项目启用CLR,使其"混合",即使它实际上不包含任何托管代码,然后项目构建可以使其成为C#.NET项目中的引用。

要使项目混合模式,请将Configuration Properties/General/Common Language Runtime Support设置为Common Language Runtime Support (/clr)

在此之后,构建系统会自动将DLL复制到应用程序输出文件夹中。