急问:怎么把已经存在的C++对象转化为com组件 如题 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 COM组件有严格的数据类型方面的要求,一般的C++对象是转不过去的。接口函数肯定要重定义。 如果你要是有源码的话,还不太费事。首先要定义接口,因为接口的调用方式是:__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;} 如果的却需要,可以通过句柄类的方式组合该类一个对象指针。再提供接口方法访问该类public成员函数 另外再问一个:如果是想转化为ActiveX控件,那么接口必须使用双接口吧? 最好用双接口,如果要把现有的c++类转化为com最简单的办法是1,创建一个接口 eg: IObject2, 把先有的类封在一个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;} 写错了,改为:#include "your_class.h"HRESULT __stdcall CDest::SayHello(){ your_namespace::your_class::SayHello(); return S_OK;} ADO 对象关闭时不允许操作 获取灰度图的灰度值,存入二维数组 最接近标准C的编译器是? 【求助】关于VC中string的宽字符和普通字符的选择 如何在内存DC里面创建按钮? 线程产生的对话框在任务栏上的窗口,如何去掉? 大侠出招啊,这个问题两天了,悬而未决! 即解即给分!! 执行delete后,为什么没有释放内存空间 如何阻塞的调用另一程序? 求教SetEvent ResetEvent使用 关于函数指针的调用语法,??? 如何在ListView隔行显示不同的颜色?
一般的C++对象是转不过去的。
接口函数肯定要重定义。
首先要定义接口,因为接口的调用方式是:__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;
}
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;
}
#include "your_class.h"
HRESULT __stdcall CDest::SayHello()
{
your_namespace::your_class::SayHello();
return S_OK;
}