C# C++/CLI DLL>Upcasting 我用C++编写了一个小包装器,包装了一个C++ DLL,这样我就可以在C.NET环境中使用它。但我需要找到一个解决“小”铸造问题的方法。这是一个关于类外观的小“草图”:

C# C++/CLI DLL>Upcasting 我用C++编写了一个小包装器,包装了一个C++ DLL,这样我就可以在C.NET环境中使用它。但我需要找到一个解决“小”铸造问题的方法。这是一个关于类外观的小“草图”:,c#,c++-cli,C#,C++ Cli,[包装器DLL代码] //ManagedBaseClass public ref class ManagedBaseClass { public: ManagedBaseClass(BaseClass* nativePtr): m_NativePtr(nativePtr) {} internal: BaseClass* m_NativePtr; }; //ManagedSomeClass public ref class ManagedSome

[包装器DLL代码]

//ManagedBaseClass

public ref class ManagedBaseClass
{
public:
    ManagedBaseClass(BaseClass* nativePtr):
        m_NativePtr(nativePtr)
        {}

internal:
    BaseClass* m_NativePtr;
};
//ManagedSomeClass

public ref class ManagedSomeClass: ManagedBaseClass
{
public:
    ManagedSomeClass(SomeClass* nativePtr):
        ManagedBaseClass((BaseClass*)nativePtr), 
        m_NativePtr(nativePtr)
        {}

    //Convert-From (BaseClass* can be casted up to SomeClass*)
    static explicit operator ManagedSomeClass^ (ManagedBaseClass^ obj)
    {
        return gcnew ManagedSomeClass((SomeClass*)obj->m_NativePtr);
    }

internal:
    SomeClass* m_NativePtr;
};
这就是设置。现在我需要在C中处理以下场景:

[C,使用包装器Dll]

var someClass = (ManagedSomeClass)baseClassObj; //Taking into account
that i can do the conversion on the C++ side using an explicit cast.
演员阵容目前不工作。
我做错了什么,还是有别的办法?我想保持当前的课程设置,只是想让C端的演员阵容发挥作用

请澄清演员阵容是如何发挥作用的。编译器错误?运行时异常?没有例外,但是someClass对象的行为不正常?哦,是的,对不起。现在我得到一个InvalidCastException。告诉我们baseClassObj是如何声明的。您只是在强制转换中缺少了一个hat^?baseClassObj的强制转换是C语言,不需要hats。这无法工作,您正在为C编译器提供两种转换对象的方法。它更喜欢显式引用转换。要么中断继承,使其成为隐式运算符,要么提供普通转换方法。