在BEGIN_DISPATCH_MAP中手动添加如下代码:
BEGIN_DISPATCH_MAP(CTest1Ctrl, COleControl)
//{{AFX_DISPATCH_MAP(CTest1Ctrl)
DISP_FUNCTION(CTest1Ctrl, "SetPt", SetPt, VT_EMPTY, VTS_DISPATCH)
//}}AFX_DISPATCH_MAP
DISP_FUNCTION_ID(CTest1Ctrl, "AboutBox", DISPID_ABOUTBOX, AboutBox, VT_EMPTY, VTS_NONE)
END_DISPATCH_MAP()
同时,在odl中函数定义代码如下
methods:
// NOTE - ClassWizard will maintain method information here.
// Use extreme caution when editing this section.
//{{AFX_ODL_METHOD(CTest1Ctrl)
[id(1)] void SetPt(CFPoint* pt);
//}}AFX_ODL_METHOD
通过如上设置,我的测试程序中能导出自定义类,同时也有这个方法。
我在客户端定义了
CFPoint pt;
pt.createDispatch("id");
pt.SetX(1);
pt.SetY(2);
通过getX,getY可以得到刚赋的值,但是传入SetPt(pt.m_lDispatch)时,无法得到正确的X,Y值,请问我该如何传递自定义类对象,自定义类的成员变量该如何定义?谢谢大家了,困扰了我两天的问题,怎么折腾都不行
22 个解决方案
#1
在线等待答案
有可能问题比较奇怪,请各位兄弟姐妹如有时间,帮忙写个有自定义类的小例子让我学习学习
有可能问题比较奇怪,请各位兄弟姐妹如有时间,帮忙写个有自定义类的小例子让我学习学习
#2
我的邮箱是:forest21000@yahoo.cn,麻烦大家了
#3
#4
恳请大家帮帮忙
#5
为什么没人回答呢
#6
难道没人看到我发的帖吗?还是我说明得不够详细呢?请大家指正
#7
COM不能直接导出类,要导出类有很多要求的,你还没了解COM的最基本原理。
#8
那请问r3000,我看到很多控件都有导出自定义类啊,比如说成熟的专题图制作控件TeeChart就有很多自定义类啊?
要导出类有很多要求的话,那一般有哪些要求呢?我应该看哪些资料呢?谢谢您的回答
要导出类有很多要求的话,那一般有哪些要求呢?我应该看哪些资料呢?谢谢您的回答
#9
我理解最基本的原理,有错误请指出:
ActiveX 基于COM技术,在COM中没有类的概念,只有COM对象的概念,
所以。ActiveX是不能导出类的,只能导出一些简单的结构、指针等等,复杂的自定义类
必须转换为COM对象方可导出。
COM对象最基本的要求:有GUID,必须实现接口,如IUnkown.
ActiveX 基于COM技术,在COM中没有类的概念,只有COM对象的概念,
所以。ActiveX是不能导出类的,只能导出一些简单的结构、指针等等,复杂的自定义类
必须转换为COM对象方可导出。
COM对象最基本的要求:有GUID,必须实现接口,如IUnkown.
#10
你应该看 COM原理类的资料。
#11
CFPoint* pt 如果是实现了接口的COM对象,那是可以的。
你看到TeeChart 中的,不是“自定义类”,而是实现了接口的COM对象。
你看到TeeChart 中的,不是“自定义类”,而是实现了接口的COM对象。
#12
谢谢楼上的回答,我的CFPoint类继承了CCmdTarget类,导出后的类自动转换为继承于COleDispatcher类,应该属于COM对象吧?
#13
谢谢楼上的回答,我的CFPoint类继承了CCmdTarget类,导出后的类自动转换为继承于COleDispatcher类,应该属于COM对象吧?
#14
按理说是的,CCmdTarget应该是MFC定义的,对MFC做COM不了解。
你可测试一下pt.m_lDispatch,有没有正确的值?
你可测试一下pt.m_lDispatch,有没有正确的值?
#15
r3000兄,谢谢你的回答!我已经解决了这个问题,传入参数定义为LPDISPATCH,在函数体内用FromDISPATCH解析LPDISPATCH参数即可获得传入的自定义类对象的属性信息。
#16
前几天电脑坏了,没法上网,不好意思了,r3000兄
#17
昨天又碰到一个问题,我定义了一个CFPoints类,即CFPoint的多点类,在该类中使用了CFPoint,定义如下:
vector<CFPoint> m_CFPoints ;
在CFPoints也定义了传入CFPoint的接口,然后,在外部调用的时候,定义了CFPoints的对象,也CreateDispatch了,第一次插入CFPoint时,可以正确插入值,但是,第二次插入值的时候,也插入了,但是退出函数的时候,报错了,报错的原因我调试是在判断该对象的ref值为0了,请问这是什么原因呢?
vector<CFPoint> m_CFPoints ;
在CFPoints也定义了传入CFPoint的接口,然后,在外部调用的时候,定义了CFPoints的对象,也CreateDispatch了,第一次插入CFPoint时,可以正确插入值,但是,第二次插入值的时候,也插入了,但是退出函数的时候,报错了,报错的原因我调试是在判断该对象的ref值为0了,请问这是什么原因呢?
#18
引用计数需要+1 吧。
你的对象->m_lpDispatch->AddRef();
每增加一个引用都要调用一次AddRef();
估计跟引用计数有关。
你的对象->m_lpDispatch->AddRef();
每增加一个引用都要调用一次AddRef();
估计跟引用计数有关。
#19
那请问r3000,这个计数是在传入函数前调用,还是在函数内实现?
#21
有点看不懂,呵呵,楼上的可以做个例子不
#22
COM不能直接导出类,要导出类有很多要求的,
#1
在线等待答案
有可能问题比较奇怪,请各位兄弟姐妹如有时间,帮忙写个有自定义类的小例子让我学习学习
有可能问题比较奇怪,请各位兄弟姐妹如有时间,帮忙写个有自定义类的小例子让我学习学习
#2
我的邮箱是:forest21000@yahoo.cn,麻烦大家了
#3
#4
恳请大家帮帮忙
#5
为什么没人回答呢
#6
难道没人看到我发的帖吗?还是我说明得不够详细呢?请大家指正
#7
COM不能直接导出类,要导出类有很多要求的,你还没了解COM的最基本原理。
#8
那请问r3000,我看到很多控件都有导出自定义类啊,比如说成熟的专题图制作控件TeeChart就有很多自定义类啊?
要导出类有很多要求的话,那一般有哪些要求呢?我应该看哪些资料呢?谢谢您的回答
要导出类有很多要求的话,那一般有哪些要求呢?我应该看哪些资料呢?谢谢您的回答
#9
我理解最基本的原理,有错误请指出:
ActiveX 基于COM技术,在COM中没有类的概念,只有COM对象的概念,
所以。ActiveX是不能导出类的,只能导出一些简单的结构、指针等等,复杂的自定义类
必须转换为COM对象方可导出。
COM对象最基本的要求:有GUID,必须实现接口,如IUnkown.
ActiveX 基于COM技术,在COM中没有类的概念,只有COM对象的概念,
所以。ActiveX是不能导出类的,只能导出一些简单的结构、指针等等,复杂的自定义类
必须转换为COM对象方可导出。
COM对象最基本的要求:有GUID,必须实现接口,如IUnkown.
#10
你应该看 COM原理类的资料。
#11
CFPoint* pt 如果是实现了接口的COM对象,那是可以的。
你看到TeeChart 中的,不是“自定义类”,而是实现了接口的COM对象。
你看到TeeChart 中的,不是“自定义类”,而是实现了接口的COM对象。
#12
谢谢楼上的回答,我的CFPoint类继承了CCmdTarget类,导出后的类自动转换为继承于COleDispatcher类,应该属于COM对象吧?
#13
谢谢楼上的回答,我的CFPoint类继承了CCmdTarget类,导出后的类自动转换为继承于COleDispatcher类,应该属于COM对象吧?
#14
按理说是的,CCmdTarget应该是MFC定义的,对MFC做COM不了解。
你可测试一下pt.m_lDispatch,有没有正确的值?
你可测试一下pt.m_lDispatch,有没有正确的值?
#15
r3000兄,谢谢你的回答!我已经解决了这个问题,传入参数定义为LPDISPATCH,在函数体内用FromDISPATCH解析LPDISPATCH参数即可获得传入的自定义类对象的属性信息。
#16
前几天电脑坏了,没法上网,不好意思了,r3000兄
#17
昨天又碰到一个问题,我定义了一个CFPoints类,即CFPoint的多点类,在该类中使用了CFPoint,定义如下:
vector<CFPoint> m_CFPoints ;
在CFPoints也定义了传入CFPoint的接口,然后,在外部调用的时候,定义了CFPoints的对象,也CreateDispatch了,第一次插入CFPoint时,可以正确插入值,但是,第二次插入值的时候,也插入了,但是退出函数的时候,报错了,报错的原因我调试是在判断该对象的ref值为0了,请问这是什么原因呢?
vector<CFPoint> m_CFPoints ;
在CFPoints也定义了传入CFPoint的接口,然后,在外部调用的时候,定义了CFPoints的对象,也CreateDispatch了,第一次插入CFPoint时,可以正确插入值,但是,第二次插入值的时候,也插入了,但是退出函数的时候,报错了,报错的原因我调试是在判断该对象的ref值为0了,请问这是什么原因呢?
#18
引用计数需要+1 吧。
你的对象->m_lpDispatch->AddRef();
每增加一个引用都要调用一次AddRef();
估计跟引用计数有关。
你的对象->m_lpDispatch->AddRef();
每增加一个引用都要调用一次AddRef();
估计跟引用计数有关。
#19
那请问r3000,这个计数是在传入函数前调用,还是在函数内实现?
#20
#21
有点看不懂,呵呵,楼上的可以做个例子不
#22
COM不能直接导出类,要导出类有很多要求的,