3

我创建了要在各种 WinRT 项目中使用的可移植类库。我可以在 C# Winrt Apps、VB WinRT Apps、silverlight 和 Windows Phone 中使用这个 PCL dll。但由于某种原因,我无法成功地将库添加到我的 C++ 项目中。我尝试这个时得到的错误是:

无法添加对文件“C:\Users\xyz\pqr.dll”的引用,因为它既不是 .NET 程序集也不是已注册的 ActiveX 控件。

我早些时候在 SO 上看到了同样的问题,并且 OP 发布了一个似乎对他有用的解决方案。我试图按照原始问题的建议找到以下行,但在 vcxproj 文件中找不到它。

<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>

由于我无法对原始问题发表评论,我想我应该在这里发布另一个问题。

有任何想法吗?

编辑: 我的项目设置如下所示:

  • 让我们假设我的 PCL 库名为 A.dll。
  • 我的 WinRT 组件称为 B.winmd。
  • 现在,B.winmd 在内部使用 A.dll 并围绕它创建一个包装器。

现在,当我想在 C++ 中创建 Store App C 时,我必须在我的项目 C 中添加对 A.dll 和 B.winmd 的引用。如果我只包含 B.winmd,我第一次会遇到运行时异常使用 A.dll。我究竟做错了什么?

4

2 回答 2

2

C++ 应用程序不知道如何执行托管代码。如果您想使用 C# 创建一个库并使其可用于另一个运行时环境(如 C++ 或 Javascript),那么您必须创建一个 Windows 运行时组件项目。它的公共接口仅限于 WinRT 兼容类型,以允许运行时环境之间的互操作工作。还有很多其他的小规则。

MSDN 起始页在这里

于 2013-01-24T20:29:31.377 回答
0

您的消息应该是一个很好的提示 - PCL 库是一个 .NET 库。WinRT 项目需要 WinRT 组件。您需要创建一个基于 .NET 的 WinRT 组件,该组件将包装您的 PCL 库以使其可用于非 .NET 语言。

于 2013-01-24T20:27:37.987 回答