如题

解决方案 »

  1.   

    COM组件有严格的数据类型方面的要求,
    一般的C++对象是转不过去的。
    接口函数肯定要重定义。
      

  2.   

    如果你要是有源码的话,还不太费事。
    首先要定义接口,因为接口的调用方式是:__stdcall
    所以,你的C++类的成员函数也必须定义为__stdcall
    然而C++ 的缺省调用方式是__cdecl.你也可以重新包装一个实现类,在方法实现的内部调用已有的类。例如:
    class CDest:public Iinterface
    {
            
            CSource m_object; //原有的类叫m_object,在构造函数中进行构造,在此省略。
            
            public HRESULT __stdcall SayHello();
    }HRESULT __stdcall CDest::SayHello()
    {
       m_object.SayHello(); 
       return S_OK;
    }
      

  3.   

    如果的却需要,可以通过句柄类的方式组合该类一个对象指针。再提供接口方法访问该类public成员函数
      

  4.   

    另外再问一个:如果是想转化为ActiveX控件,那么接口必须使用双接口吧?
      

  5.   

    最好用双接口,如果要把现有的c++类转化为com最简单的办法是
    1,创建一个接口 eg: IObject
    2, 把先有的类封在一个namespace 中,做法很简单在类的.h和.cpp都加一个namespace your_namespace {.....}
    3, 在你的接口中加入你类中同样实现方法函数命和同样的参数
    4,还有把类的头文件INCLUDE进去
    5, 在接口的方法实现中直接调用your_namespace::你要调用类的方法
    eg:
    #include "your_class.h"
    HRESULT __stdcall CDest::SayHello()
    {
       your_namespace::SayHello(); 
       return S_OK;
    }
      

  6.   

    写错了,改为:
    #include "your_class.h"
    HRESULT __stdcall CDest::SayHello()
    {
       your_namespace::your_class::SayHello(); 
       return S_OK;
    }