在C ++ winrt项目中包含PCL库DLL

时间:2013-01-24 19:58:43

标签: visual-c++ windows-runtime portable-class-library

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

  

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

我之前看到了same question,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的时间。我做错了什么?

2 个答案:

答案 0 :(得分:2)

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

MSDN首页is here

答案 1 :(得分:0)

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