从另一个Windows Phone运行时组件项目中引用C ++类

用户名

我有两个包含C ++类的Windows Phone运行时组件项目(Windows Phone Silverlight 8.1):

  • FooRuntimeComponent:
    • FooClass.cpp
    • FooClass.h
  • BarRuntimeComponent:
    • BarClass.cpp
    • BarClass.h

我想在Bar类中创建的Foo对象上调用方法。

Foo.h:

#pragma once

namespace FooRuntimeComponent
{
    public ref class FooClass sealed
    {
    public:
        FooClass();
    };
}

FooClass.cpp:

#include "FooClass.h"

using namespace FooRuntimeComponent;
using namespace Platform;

FooClass::FooClass()
{
}

BarClass.cpp:

#include "BarClass.h"
#include "FooClass.h"

using namespace BarRuntimeComponent;
using namespace Platform;
using namespace FooRuntimeComponent;

BarClass::BarClass()
{       
    FooClass^ foo = ref new FooClass();
}

如果我尝试通过将FooRuntimeComponent.lib指定为附加依赖项并提供指向.lib的路径来“传统地”将Foo链接到Bar,那么我将收到Bar的以下编译错误:

error LNK2019: unresolved external symbol "public: __cdecl FooRuntimeComponent::FooClass::FooClass(void)" (??0FooClass@FooRuntimeComponent@@Q$AAA@XZ) referenced in function "public: __cdecl BarRuntimeComponent::BarClass::BarClass(void)" (??0BarClass@BarRuntimeComponent@@Q$AAA@XZ)

在FooRuntimeComponent.lib上运行dumpbin.exe会产生:

Microsoft (R) COFF/PE Dumper Version 12.00.31101.0
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file FooRuntimeComponent.lib

File Type: LIBRARY

  Summary

          FF .debug$S
          14 .idata$2
          14 .idata$3
           4 .idata$4
           4 .idata$5
          20 .idata$6

我确实注意到运行时组件会生成一个.winmd文件。我尝试添加此.winmd作为对Bar项目的引用,但是随后出现以下错误:

error C2011: 'FooRuntimeComponent::FooClass' : 'class' type redefinition
error C2027: use of undefined type 'FooRuntimeComponent::FooClass'
error C2027: use of undefined type 'FooRuntimeComponent::FooClass'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
error C2680: 'FooRuntimeComponent::FooClass ^' : invalid target type for dynamic_cast
error C2440: 'return' : cannot convert from 'FooRuntimeComponent::FooClass ^' to 'int'

我想念什么吗?

十年月亮

在解决方案资源管理器中,右键单击您的BarRuntimeComponent (Windows Phone Silverlight 8.1)项目项(不是解决方案),然后选择Add> References...单击Add New Reference...按钮,然后找到FooRuntimeComponent项目(如果foo项目与bar项目位于相同的解决方案中,那么您将Solution在窗口左侧的项目下找到foo项目)。确保选中了foo项目,然后单击“确定”,然后再次单击“确定”。现在,您应该可以FooClass在您的bar项目中使用了。这就是全部。

您可能首先需要撤消以前可能做过的任何其他引用(例如,手动链接的.lib文件)。还要#include "FooClass.h"从BarClass.cpp文件中删除该行。编译器从.winmd文件获取类型。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在运行时访问另一个项目中的类

来自分类Dev

如何在另一个项目中引用一个类?

来自分类Dev

如何在另一个类 C# Windows Forms 中引用一个类

来自分类Dev

使用另一个C#类(Windows Phone)中的变量

来自分类Dev

C ++从另一个类访问类成员

来自分类Dev

如果从另一个类运行一个类,如何修复组件显示?

来自分类Dev

如何用C#编写的类库引用用C ++编写的Windows运行时组件?

来自分类Dev

将另一个类的项目添加到另一个类的属性。目标C

来自分类Dev

从另一个类添加Swing组件

来自分类Dev

从另一个类添加Swing组件

来自分类Dev

Traceur中另一个类的引用方法

来自分类Dev

在另一个类中引用MainActivity的成员

来自分类Dev

Traceur中另一个类的引用方法

来自分类Dev

在Kivy中引用另一个类的函数

来自分类Dev

基类是对另一个对象的引用

来自分类Dev

如何从另一个项目调用类的方法

来自分类Dev

从另一个类运行代码

来自分类Dev

在另一个类的UI线程上运行

来自分类Dev

如何从另一个类运行方法?

来自分类Dev

如何从另一个类运行方法

来自分类Dev

从另一个类运行代码

来自分类Dev

从MainActivity在另一个类中运行代码

来自分类Dev

为json引用一个类中的另一个类

来自分类Dev

如何从一个类到另一个类引用变量?

来自分类Dev

在另一个类中引用一个类的属性?

来自分类Dev

为json引用一个类中的另一个类

来自分类Dev

通过方法从另一个类引用一个类变量

来自分类Dev

从另一个类C ++获取数组

来自分类Dev

从另一个类C ++访问对象