从非托管类函数创建托管对象

时间:2011-04-06 08:02:17

标签: visual-c++ c++-cli

我正在尝试在非托管代码中创建托管C ++ / CLI对象。

  1. 这可能吗?
  2. 如果是这样,我做得对吗?见下面的代码

    #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
    
        }
    }
    
  3. 当我编译UnmanagedClass源文件时,我不断收到大量错误,第一个错误是error C2039: 'ComponentModel' : is not a member of 'System'。怎么没有认出ComponentModel

    我认为这是IJW(它只是有效); - )

1 个答案:

答案 0 :(得分:1)

以下是包装器的示例:

class UnmanagedClass
{
    gcroot<ManagedClass^> m_managed;

public:
    UnmanagedClass() 
    {
       m_managed = gcnew ManagedClass();
    }
};

看这里:

C++/CLI - Managed class to C# events

wrapper to c++/cli

修改

当你在using语句中出现错误,并且你知道它应该存在时,通常是因为没有引用该dll。

转到项目参考,选择添加参考。

您可以在.Net选项卡中添加.Net程序集。找到你需要的那个并添加它。