C++ cli c++;在包装器中使用抽象类的本机代码

C++ cli c++;在包装器中使用抽象类的本机代码,c++-cli,polymorphism,abstract-class,wrapper,C++ Cli,Polymorphism,Abstract Class,Wrapper,我需要为我的非托管代码实现一个c#GUI。因此,我设计了一个包装器来处理我的本机代码,但这并不管用 我有一个方法需要创建一个抽象类的实例,但我不知道如何处理它 首先,C++类中,我使用了抽象类: class Interface abstract { public: Interface (void); public: ~Interface (void); public: virtual double Get() =

我需要为我的非托管代码实现一个c#GUI。因此,我设计了一个包装器来处理我的本机代码,但这并不管用

我有一个方法需要创建一个抽象类的实例,但我不知道如何处理它

首先,C++类中,我使用了抽象类:

 class Interface abstract
    {
       public:      Interface (void);
       public:      ~Interface (void);

       public:      virtual double Get() = 0;   
    };

根据我当前的应用程序,我使用了一个ClassSpecific1和一个ClassSpecific2,并且我从抽象类继承了每个类的函数

    class ClassSpecific1 : public Interface
    {
       public:      ClassSpecific1 (void);
       public:      ~ClassSpecific1 (void);

       private:     double Get();//based on the abstract class

    };


    class ClassSpecific2 : public Interface
    {
       public:      ClassSpecific2 (void);
       public:      ~ClassSpecific2 (void);

       private:     double Get();//based on the abstract class

    };

后来我使用了另一个类,它作为一个普通类工作,并将ClassSpecific1或ClassSpecific2与抽象类的实例一起使用

    class ClassAPI
    {
       public:      ClassLaserAPI(void);
       public:      ~ClassLaserAPI(void);

       public:      double Get(Interface *objToInterface);//This Get() calls the Get() in ClassSpecific1 or ClassSpecific2 
    };

在这里之前,一切似乎都很好。我已经测试了所有的东西,并按预期工作。我最大的问题是,我不知道如何使我的方法
Get(Interface*objpointerface)
从ClassAPI进入包装器。为了能够在包装器上创建实例
**(Interface*objPointerface)**
,我是否需要先为抽象类制作一个包装器

这就是我到目前为止所拥有的,我希望有人能给我一些帮助,我正在迷茫如何继续



我也遇到了同样的问题,并通过以下主题解决了这个问题:

我也在使用一个非托管的抽象类,通过遵循链接中概述的技巧,我的工作正常了。最后,我发现了一些错误需要修复,并通过将非托管项目中的链接器选项更改为不使用/clr编译,并且只有包装器项目使用/clr编译来修复这些错误


发布输出错误可能有助于澄清您遇到的一些问题…

核心问题是您的接口是非托管接口,您无法通过它调用托管代码。使用<代码>接口类< /Cord>关键字(对于C++或CLI,不管怎样,如果你想在这里寻求帮助,请避免C++)。汉斯谢谢你的评论。这里没有C++ +CLI。什么版本的Visual C++?
    namespace API
    {

            public __gc class APIManaged
            {
                    public: APIManaged(void);
                    public: ~APIManaged(void);

        /** Unmanaged pointer to ClassAPI 
         *  
         */
                    private:    ClassAPI __nogc* cAPI;

                    public:     double Get(Interface __nogc* objInterface);
            };