1

当我尝试在从 ObservableCollection 继承的托管 C++ 中创建一个类时,我收到错误:错误 C2039: 'ObservableCollection' : is not a member of 'System::Collections::ObjectModel'

这是我的代码:

using namespace System;
using namespace System::Collections;
using namespace System::Collections::Generic;
using namespace System::Collections::ObjectModel;

public ref class DataMatrix : public System::Collections::ObjectModel::ObservableCollection<array<Object^>^> {};

为什么我不能从 C++-CLI 使用这个类?我在 C# 中使用它没有任何困难。

4

2 回答 2

3

您确定添加了对 WindowsBase.dll 的引用吗? ObservableCollection<T>存在于这个 DLL 中,并且它不包含在 C++ 项目的默认引用列表中。

于 2009-09-21T21:25:18.103 回答
0

我遇到了完全相同的问题;VS2010。我有对 WindowsBase.dll 的引用,但仍然出现错误。我在使用 ObservableCollection 的同一解决方案中有一个 C# 项目,它编译得很好。我最终发现这与我将目标 .NET 框架设置为 V3.5(MMC 项目和 MMC 尚不支持 .NET 4.0)这一事实有关。我已将 C# 项目设置为使用“.NET V3.5 Client”,但托管 C++ 项目只是设置为“.NET V3.5”。似乎可以在 WindowsBase.dll 的“客户端”版本中找到 ObservableCollection 定义,但在常规版本中找不到。

换一种说法,.csproj 文件包含以下行,但 .vcproj 没有。

<TargetFrameworkProfile>Client</TargetFrameworkProfile>

当指定“客户端”时,DLL 来自:

C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v3.5\Profile\Client

当未指定“客户端”时,DLL 来自:

C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0

将“TargetFrameworkProfile”标签添加到 .vcproj 会强制编译器使用 WindowsBase.dll 的客户端版本,然后编译就会成功。我无法解释为什么,但我很高兴把这个令人头疼的东西放在我身后。

于 2010-07-23T15:27:39.653 回答