gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 13:41:29 25 4
gpt4 key购买 nike

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

  • FooRuntimeComponent:
    • FooClass.cpp
    • FooClass.h
  • BarRuntimeComponent:
    • 酒吧类.cpp
    • Bar类.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 项目位于同一解决方案中,那么您会发现foo 项目位于窗口左侧的 Solution 项下)。确保选中 foo 项目,然后单击“确定”,然后再次单击“确定”。您现在应该可以在您的 bar 项目中使用 FooClass 了。仅此而已。

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

关于c++ - 从一个 Windows Phone 运行时组件项目中引用另一个 C++ 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27522357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com