相关疑难解决方法(0)

LNV2022(重复管理类型具有不同的可见性)在MSVS 2012上

我正在将解决方案从MSVS2005移植到MSVS2012.这些项目使用的是C++ .NET,但也使用自制的原生C++库.我们用2005构建项目没有问题,但是现在,我无法使用2012构建项目.我收到以下错误消息:

MyFile.obj:错误LNK2022:元数据操作失败(801311E4):重复的托管类型具有不同的可见性.

这是什么意思?您需要什么信息来帮助我?

谢谢你的帮助?

.net c++-cli visual-studio visual-c++

10
推荐指数
1
解决办法
2778
查看次数

编译器错误C2158的最佳解决方法:make_public不支持本机模板类型

我有两个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)

compiler-errors c++-cli pragma

5
推荐指数
1
解决办法
3131
查看次数