I'm trying to write a managed wrapper (C++/CLI) around an unmanaged C++ static library and am having two problems:
The unmanaged library uses
std::shared_ptr
in its headers.<memory>
is included, and the header compiles as part of an unmanaged project. When I include this header in the managed project, however, I receive this error:error C2039: 'shared_ptr' : is not a member of 'std'
How do I access the
开发者_开发问答Values
collection of aSortedDictionary<K, V>
from C++/CLI? I cannot seem to find any examples of the proper syntax, and the C#-style syntax does not compile.
Code for #1:
// 1>Dummy.h(10): error C2039: 'shared_ptr' : is not a member of 'std'
#pragma once
#pragma managed(push, off)
#include <memory>
class Foo {};
typedef std::shared_ptr<Foo> FooPtr;
#pragma managed(pop)
using namespace System;
namespace Dummy {
public ref class Class1
{
public:
Class1(FooPtr);
};
}
shared_ptr lives in <memory>
not <functional>
. Make it look similar to this:
#pragma managed(push, off)
#include <memory>
#include "yourUnmanagedLibrary.h"
#pragma managed(pop)
Second question (ask only one please):
using namespace System::Collections::Generic;
...
SortedDictionary<int, String^>^ coll = gcnew SortedDictionary<int, String^>;
coll->Add(1, "one");
coll->Add(0, "zero");
for each (String^ value in coll->Values) {
Console::WriteLine(value);
}
I have found the answer here: Edit $(IncludePath) "macro" in Visual Studio 2010
Visual Studio 2010 is including the headers from Visual Studio 2008, which do not have shared_ptr
.
The exact resolution is described here. The Platform Toolset on the General tab defaulted to vs90
. Changing this to vs100
resolved the issue.
精彩评论