Visual c++ 从非托管类函数创建托管对象
我试图在非托管代码中创建托管C++/CLI对象Visual c++ 从非托管类函数创建托管对象,visual-c++,c++-cli,Visual C++,C++ Cli,我试图在非托管代码中创建托管C++/CLI对象 这可能吗 如果是,我做得对吗?请参阅下面的代码 #include <vcclr.h> #include <ManagedClass.h> // compiled with /clr namespace X { class UnmanagedClass { UnmanagedClass(){} ~UnmanagedClass(){} gcroot<Y:
#include <vcclr.h>
#include <ManagedClass.h>
// compiled with /clr
namespace X
{
class UnmanagedClass
{
UnmanagedClass(){}
~UnmanagedClass(){}
gcroot<Y::ManagedClass^> m_guiControl;
void functionA()
{
m_guiControl = new gcroot<Y::ManagedClass^>;
}
}
}
// compiled into Managed dll with /clr
// in file ManagedClass.h in a separate project
using namespace System::ComponentModel;
// more usings here ..etc
namespace Y {
public ref class ManagedClass : public System::Windows::Forms::UserControl
{
// implementation here
}
}
#包括
#包括
//使用/clr编译
名称空间X
{
类非托管类
{
非托管类(){}
~UnmanagedClass(){}
gcroot m_guiControl;
无效函数()
{
m_guiControl=新的gcroot;
}
}
}
//使用/clr编译到托管dll中
//在单独项目的ManagedClass.h文件中
使用名称空间System::ComponentModel;
//这里有更多的用法……等等
名称空间Y{
public ref类ManagedClass:public System::Windows::Forms::UserControl
{
//在这里实现
}
}
非托管类
源文件时,我不断收到大量错误,第一个错误是错误C2039:“ComponentModel”:不是“System”的成员
。为什么它不能识别组件模型
我以为这应该是IJW(它只是工作);-) 以下是包装器的示例:
class UnmanagedClass
{
gcroot<ManagedClass^> m_managed;
public:
UnmanagedClass()
{
m_managed = gcnew ManagedClass();
}
};
类非托管类
{
GCM_管理;
公众:
非托管类()
{
m_managed=gcnew ManagedClass();
}
};
看这里:
编辑:
当您在using语句中遇到错误,并且您知道它应该存在时,通常是因为该dll未被引用
转到项目引用,选择添加引用
您可以在.Net选项卡中添加.Net程序集。找到您需要的一个并添加它。下面是一个包装器示例:
class UnmanagedClass
{
gcroot<ManagedClass^> m_managed;
public:
UnmanagedClass()
{
m_managed = gcnew ManagedClass();
}
};
类非托管类
{
GCM_管理;
公众:
非托管类()
{
m_managed=gcnew ManagedClass();
}
};
看这里:
编辑:
当您在using语句中遇到错误,并且您知道它应该存在时,通常是因为该dll未被引用
转到项目引用,选择添加引用
您可以在.Net选项卡中添加.Net程序集。找到你需要的,然后添加它。更新的问题-它仍然不起作用,它似乎不承认托管C++对象中的所有使用语句。您需要为VC++项目添加对相应.NET程序集的引用。耶!谢谢马吕斯,这就是我一直在寻找的答案。与C++的.NET一样,只是我不知道如何为C++项目做这件事。你应该把它作为一个答案。更新的问题-它仍然不起作用,它似乎没有认识到所有的使用管理的C++对象的语句。这是不够的,添加使用指令。您需要为VC++项目添加对相应.NET程序集的引用。耶!谢谢马吕斯,这就是我一直在寻找的答案。与C++的.NET一样,只是我不知道如何为C++项目做这件事。你应该把它记下来作为回答。