高手请入:找不到成员

swimmer2000 2008-02-19 09:06:54
我作的一个ActiveX控件,
在一个对话框上关联了一个控件
对话框提供有一个成员函数,里面调用了关联控件的方法。

然后在ctrl类里面调用对话框的成员函数,
也就是想间接调用对话框上控件的方法,
结果提示说"找不到成员",
请大家给分析下是什么原因.
...全文
603 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
swimmer2000 2008-02-20
  • 打赏
  • 举报
回复
谢谢各位的回复,
原来是因为我交换了两个控件的名称,
而在DoDataExchange里却没有跟着换,
所以会出现这样的提示。
jameshooo 2008-02-20
  • 打赏
  • 举报
回复
调用这个窗口控件的GetIDispatch方法获得控件的IDispatch接口,然后查询对应的ActiveX控件的接口指针,然后直接调用接口方法。
greatws 2008-02-19
  • 打赏
  • 举报
回复
间接调用必须要把指针传过去

假设你有一个CMyDlg类,这是你的对话框,还有个一Ctrl类,Ctrl类可以有一个CMyDlg指针成员,如CMyDlg* p;
现在可以利用Ctrl类的构造函数传递指针,Ctrl::Ctrl(const CMyDlg* p_m) : p(p_m) {}
然后在CMyDlg实现文件中调用一下Ctrl类的构造函数就可以传递指针,如Ctrl ctrl(this);要调用就用p-> CMyDlg的某个public成员就行了

当然你也可以通过发消息或者其他方法传递
arong1234 2008-02-19
  • 打赏
  • 举报
回复
要调用某个类的成员函数,对应的指针必须是该类类型的

例如CMyDialog::public CDialog,如果CMyDialog有函数MyFunc,而你用CDialog* pDlg; pDlg->MyFunc去调用,即使这个对话框对象真实类型是CMyDialog,这样的调用依然是非法的,因为你使用的指针类型是CDialog*

所以,你遇到的问题要么是指针类型不对(使用正确的类型),要么是遇到超前引用错误(参见http://www.vckbase.com/bbs/prime/viewprime.asp?id=431

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧