C++继承的C#接口

C# interface inherited by C++

本文关键字:接口 继承 C++      更新时间:2023-10-16

我正在使用COM在C++和amp;C#。我的问题是我已经实现了包含参数作为接口对象的方法&该接口由C++类实现,该C++类再次由另一C++类实现。我在C#中的代码场景如下所述:

    namespace Example
    {
     public class First:ITest
        {
         void GetObjectOfC#Interface(ISample sample);
        }
     }
  namespace Example
   {
    Interface ISample
    {
      void Test();
    }
  }

Class First和ITest接口,这些都是COmVisible,通过Com暴露给C++。ISample接口也在COM中公开,但不是由C#类First实现的。

C++中的代码场景:

    Class SampleFirst: public Example::ISample
   {
   };

这个SampleFirst类再次被另一个C++类头文件继承,如下所示:

 Class SampleSecond:public SampleFirst
 {
   public:
         void MakeAnObject();
   private:
       Example::ITestPtr _testPtr;
       Example::ISamplePtr _samplePtr;
 };

在SampleSecond.Cpp文件中,

 void SampleSecond::MakeAnObject()
   {
     _testPtr.CreateInstance(__uuidof(Example::First));
      samplePtr=this;
     _testPtr->GetObjectOfC#Interface(samplePtr);
    }

这里,这意味着通过考虑继承功能,将相同的类对象分配给samplePtr。但在.tli文件中,HResult失败。请告诉我是否有相同的解决方案。

仅通过简单的强制转换不需要静态强制转换,即QueryInterface中的(ISample)this就足够了

为了解决上述问题,这个链接非常有用,因为我在实现QueryInterface时犯了一个愚蠢的错误,它们混淆了接口指针。