【发布时间】:2014-08-26 19:06:06
【问题描述】:
我是一名 Visual Studio 2013 新手,正在尝试弄清楚如何在 Visual Studio 中构建 C DLL,然后从 C# 应用程序中调用 C lib 导出的函数。我已经构建了所有内容,但我无法弄清楚将 DLL 包含在应用程序构建中的正确方法,以便在使用 [DLLImport()] 时它实际上会正确加载。我目前在尝试从我的 C# 类中调用库中的函数时收到 System.DllNotFoundException。
我已经设置了一个 VS 2013 解决方案,其中包含以下项目:
HelloWorldLib.Shared: 包含 DLL 的 .cpp 和 .h 文件的共享项目
HelloWorldLib.Windows: 引用共享项目并为 Win 8.1 构建 DLL 的 Win 8.1 C++ 项目
MyApp-Win.Windows: 想要使用 HelloWorldLib.windows 构建生成的 HelloWorldLib.Windows.dll 的 Win 8.1 的 C# 项目
我一直在查看许多 SO 问题和答案。例如,我认为我的问题与这个问题类似,但似乎没有以任何有用的方式回答: Interop, Native DLL and Visual Studio build process
其他一些答案建议添加对 DLL 的文件引用,但我将如何做到这一点并保持正确的调试/发布版本?鉴于所有这些项目都在同一个解决方案中构建,并且它们之间存在构建依赖关系,感觉应该有一种直接的方式来设置它。
顺便说一句,我正在使用共享项目设置,因为我的最终目标是弄清楚如何让这一切与 Xamarin 一起工作,以针对 iOS、Win、Win Phone、Mac 和 Android。这样我们就可以为我们的高性能需求代码使用一个通用的 C/C++ 层,并从各个平台的 UI 层中引用它。
【问题讨论】:
-
您知道您需要为每个平台重新编译本机部分,对吗?
-
是的。我意识到需要为每个平台编译本机库。我的期望是,由于我已经构建了从“应用程序项目”到“DLL 项目”的依赖项和引用设置,因此当我为每个平台构建应用程序时,VS 将同时构建正确的本机 DLL。从构建日志中可以看到,它似乎确实做到了这一点,但我无法弄清楚如何让构建的 DLL 包含在应用程序中。
标签: c# visual-studio visual-c++ dll xamarin