我正在将解决方案从MSVS2005移植到MSVS2012.这些项目使用的是C++ .NET,但也使用自制的原生C++库.我们用2005构建项目没有问题,但是现在,我无法使用2012构建项目.我收到以下错误消息:
MyFile.obj:错误LNK2022:元数据操作失败(801311E4):重复的托管类型具有不同的可见性.
这是什么意思?您需要什么信息来帮助我?
谢谢你的帮助?
我有两个c ++/cli dll(即使用/ clr编译),其中A.dll引用B.dll.在程序集B中,我有一个方法,GetMgdClassB,我想从程序集A调用.这是程序集B(B.cpp)中的代码:
namespace B
{
public class NativeClassB
{
public:
NativeClassB();
// ...
};
public ref class MgdClassB
{
public:
static MgdClassB ^ GetMgdClassB(const std::vector<NativeClassB *> & vecNativeBs)
{
// ...
vecNativeBs;
return gcnew MgdClassB();
}
};
}
Run Code Online (Sandbox Code Playgroud)
请注意,方法GetMgdClassB采用std :: vector.在程序集A中,我尝试使用以下代码(A.cpp)调用此方法:
namespace B
{
class NativeClassB;
}
#pragma make_public(std::vector<B::NativeClassB *>)
namespace A
{
void Foo()
{
std::vector<B::NativeClassB *> vecNativeBs;
B::MgdClassB::GetMgdClassB(vecNativeBs);
}
}
Run Code Online (Sandbox Code Playgroud)
当我编译A.cpp时,我收到以下错误:
error C2158: 'std::vector<_Ty>' : #pragma make_public directive is currently supported for native non-template types only …Run Code Online (Sandbox Code Playgroud)