使用C#项目的一个解决方案中的本机C ++ DLL

时间:2014-11-04 10:45:30

标签: c# c++ visual-studio visual-studio-2012 dll

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

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

  

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

找不到DLL也就不足为奇了,因为应用程序是从其输出目录运行的,并且输出目录对于C#和C ++项目是不同的。我不想写一个显式路径作为我的导入,如`" .. \ .. \ Debug \ xxxxx.dll"。

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

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:3)

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

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

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