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