从 WP8.1 RT 或 WP8.1 Silverlight 调用 DLL 中的 C++ 函数

Call C++ function in DLL from WP8.1 RT or WP8.1 Silverlight

目前我正在开发 WP8.1 RT 和 WP8.1 Silverlight 项目。

[WP8.1 RT] 和 [WP8.1 Silverlight] 都可以从 DLL 调用本机函数,对吗?

c++ DLL项目类型与[WP8.1 RT]和[WP8.1 Silverlight]有关系吗?

我有点困惑,

VS2013 for WindowsPhone有5种dll工程

DLL(Windows Phone 8.0)             <- WP8.0 SL
DLL(Windows Phone)                 <- WP8.1 RT
DLL(Windows Phone Silverlight 8.1) <- WP8.1 SL
Windows Runtime Component(Windows Phone 8.0) <- WP8.0 SL Runtime component
Windows Runtime Component(Windows Phone Silverlight 8.1)

感谢 Soonts 的回答。

DLL 和 Windows 运行时组件的区别在于 API 它们公开。

DLL 导出可从 C++ 代码或 WP 8.1 中的 C# 调用的函数(在 8.1 之前,[DllImport] 属性已损坏)。

Windows Runtime Components 不导出函数,而是公开类似 COM 的对象 + 类似 .NET 的类型信息。该对象可以从另一个 C++/CX 项目或 .NET(甚至从 WP 8.0 上的 SL)使用。此外,它们还可以使用其他 WRT 组件(您自己的和系统提供的)。

在内部,它们都可以包含经典的 C++ 代码、对 WinAPI 的允许子集的调用,以及对 xap/appx 程序包中其他非托管 DLL 的调用。

WP Store 和 WP SL 的区别在于API允许使用。有一些 API 仅存在于 Silverlight 中,但是 WP SL 可以访问 WP Store 可用的所有 API。

简而言之,如果您需要支持 WP 8.1,Store 和 SL — 如果您要编写经典 C++ 代码并公开 C,请选择“DLL (Windows Phone)” -style API,或“Windows Runtime Component (Windows Phone)”,如果你要混合经典 C++ 和 C++/CX,并公开面向对象 API.