Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C++/CLI对象转换_C#_Pointers_C++ Cli - Fatal编程技术网

C# C++/CLI对象转换

C# C++/CLI对象转换,c#,pointers,c++-cli,C#,Pointers,C++ Cli,在CLI和包装器制作方面有点新,并且有一个关于指针和对象转换的问题 我的本机代码的标题: class Telegram : public Message { public: Telegram(const Telegram& tele); int variablesX; int variablesY; } Telegram::Telegram(const Telegram& tele) : Message(tele.lenght) { va

在CLI和包装器制作方面有点新,并且有一个关于指针和对象转换的问题

我的本机代码的标题:

class Telegram : public Message
{
  public:
     Telegram(const Telegram& tele);
     int variablesX;
     int variablesY;
}
Telegram::Telegram(const Telegram& tele) : Message(tele.lenght)
{
   variablesX = tele.variablesX;
   variablesY = tele.variablesY;
}
本机代码的源代码:

class Telegram : public Message
{
  public:
     Telegram(const Telegram& tele);
     int variablesX;
     int variablesY;
}
Telegram::Telegram(const Telegram& tele) : Message(tele.lenght)
{
   variablesX = tele.variablesX;
   variablesY = tele.variablesY;
}
以及试图进入托管代码的用户: 标题:

资料来源:

TelegramWrapper::TelegramWrapper(TelegramWrapper^ tel) : MessageWrapper(tel->lenght)
{
   myTelegram = new Telegram(reinterpreter_cast<Telegram%>(tel));
}
可以编译,没有错误,只是在C应用程序中无法使用,因为我收到错误:“TelegramWrapper Telegrame”不受语言支持。 我也尝试过安全强制转换,但由于指针的差异,这是不可能的。 类型如何将电报包装器对象转换为电报?
提前感谢您的回答

我对C++/CLI不太熟悉,但是如果你想做一个包装器,那么你应该包装而不是强制转换,除非我遗漏了一些明显的东西

public ref class TelegramWrapper : public MessageWrapper
{
    public:
        TelegramWrapper(TelegramWrapper^ tel);
        TelegramWrapper(const &Telegram tel);
    private:
        Telegram *myTelegram;

    property int MyVariablesX {
        public: int get { return myTelegram->someVariablesX; }
        public: void set(int value) { myTelegram->someVariablesX = value; }
    }

    property int MyVariablesY {
        public: int get { return myTelegram->someVariablesY; }
        public: void set(int value) { myTelegram->someVariablesY = value; }
    }
};

TelegramWrapper::TelegramWrapper(TelegramWrapper^ tel) : MessageWrapper(tel->Lenght)
{
    myTelegram = tel->myTelegram;
}

TelegramWrapper::TelegramWrapper(const &Telegram tel) : MessageWrapper(tel.lenght)
{
    myTelegram = tel;
}

这可能有助于您无法将托管类对象强制转换为本机类对象,因为它们的底层实现和存储完全不同。您必须转换、创建一个新的电报对象。请注意,本机代码也不能创建电报对象,必须添加另一个构造函数或工厂方法。