代码之家  ›  专栏  ›  技术社区  ›  tranmq

C++与C语言之间的一类智能指针的编组

  •  3
  • tranmq  · 技术社区  · 16 年前

    我有一个ActiveX控件(用C++编写)并引用它的C语言项目中的RCW程序集(由AXIMP.exe创建)。

    在实现AX控件的C++代码中,我有一个类实现了一个接口,该接口作为AX控件的一个属性被公开。

    看看生成的rcw程序集,我看到了接口。我可以尝试声明其类型的变量。

    现在,如果我只有一个指向实现内存中接口的C++类实例的指针,那么是否有可能将其数据整理成使用该指针表示接口的托管C++对象?

    请注意,它不是接口指针。它是指向类实例的指针。

    2 回复  |  直到 16 年前
        1
  •  1
  •   Mark P Neyer    16 年前

    你可能想试试c++/CLI。编写C++与C语言之间互操作的代码是一个很快的操作。

        2
  •  1
  •   JaredPar    16 年前

    我想这里有两个问题。

    可以封送指向托管代码的“this”指针,但不能将其作为特定接口

    对。这可以通过在C应用程序中实现COM接口,然后将“this”作为参数之一传递来实现。接受“this”指针的托管类型应该是int32或int64(unsigned ok),具体取决于您的平台

    我能用这个指针做些有用的事吗

    是和不是。

    不能直接调用此指针上的任何实例方法,因为没有可将值强制转换为的类型。所以它不能像使用COM接口那样使用。

    您可以在本机应用程序中定义一组外部“c”方法,这些方法将该类型的a指针作为第一个参数,然后调用该对象上的特定方法。然后你就可以用c来输入这个方法

    C++

    void SomeType_SomeMethod(SomeType* pSomeType) {
      pSomeType->SomeMethod();
    }
    

    C.*

    [DllImport("YourDll.dll")]
    public static extern void SomeType_SomeMethod(IntPtr pSomeType);