нативный код c ++ с использованием абстрактного класса в оболочку - PullRequest
1 голос
/ 21 сентября 2011

Мне нужно реализовать ac # GUI для моего неуправляемого кода.Итак, я разработал оболочку для работы с моим собственным кодом, но это не сработает.

У меня есть метод, который требует создания экземпляра для абстрактного класса, и я не уверен, как с этим обращатьсяit.

Сначала для своих классов 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 *objToInterface) из ClassAPI в моей обертке.Нужно ли мне сначала создавать оболочку для моего абстрактного класса, чтобы можно было создать экземпляр **(Interface *objToInterface)** на оболочке?

Это то, что у меня есть, надеюсь, кто-нибудь может мне помочьЯ теряюсь в том, как действовать.


    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);
            };

1 Ответ

0 голосов
/ 25 апреля 2014

У меня тоже есть та же проблема, и она решена с помощью этой темы: C ++ / CLI Наследование от нативного класса C ++ с абстрактными методами и предоставление его C #

Я тожеЯ использую неуправляемый абстрактный класс и получил работу, следуя советам, изложенным в ссылке.В итоге я исправил несколько ошибок и исправил их, изменив параметры компоновщика в моих неуправляемых проектах, чтобы они не компилировались с / clr, и только проект-оболочка компилируется с использованием /clr.

Размещение ошибок вывода может помочь прояснитьнекоторые неприятности, которые у вас возникают ...

...