Add 到 工程中的已注册组件无法使用。说不是一个OLE Control。但是插入对话框的同样组件就可以用相同的方法使用。why?

hillfree 2002-01-10 01:41:47
在VS6中,工程菜单-Add to Project-Components and Controls里

1。在已经注册的控件中选择了一个组件加入工程。ComponentA 例如

2。VS自动生成了一个类。 CComponentA


3。这时候我在CMainframe声明了该类的成员 CComponentA m_Web;

4。结果使用这个成员的函数时,出现断言错:
not an OLE control (not yet, at least)

但是,如果在一个对话框中,采用右键的Insert ActiveXControl加入此控件,并且同样声明一个成员,则使用起来就没有问题。


问:这是为什么? 在没有对话框的情况下应该怎么办?
...全文
244 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
hillfree 2002-01-13
  • 打赏
  • 举报
回复
Wither(萎君子)所言,果然理解的精辟呀.hehe

那么这样试试好了,我在MainFrame中初始化这个ActiveX控件,然后在非窗口类中PostMessage到MainFrame中,在Mainframe中作一个映射来处理一下好了.

先去试试,多谢各位的讨论,各位还有什么高见,望能一吐为快,共同提高.

ps.本来是可以给分了.不过还是舍不得大家就这样散了.所以等等,希望大家能在讨论一下.分数的话没有问题.呵呵.对了,不知为什么,小弟的专家分好像僵住了,似乎别人给了也加不上去.???很疑惑这个.嘿嘿,其实也没几分.:)就是觉得是不是论坛的bug太多了
Wither 2002-01-12
  • 打赏
  • 举报
回复
我说一下我的理解:
ActiveX本身也是一个窗口,所以你当然要主动的Create它,跟普通窗口不同的是。它总是需要一个父窗口,而且这个父窗口要是一个ControlContainer,要支持IControlSite等接口。这就是在创建工程时我们要选ActiveX支持的原因,ActiveX就是依靠和容器约定的几个接口通信。

非窗口类中的确不能使用ActiveX,自动生成的类叫做包装类。

Soft21 2002-01-12
  • 打赏
  • 举报
回复
大家好啊,看来,这里还是有高手的嘛
qiyao 2002-01-11
  • 打赏
  • 举报
回复
有那位高手,可以搞定这个!!!
http://www.csdn.net/Expert/topic/470/470143.shtm
hillfree 2002-01-11
  • 打赏
  • 举报
回复
刚才有翻了翻内幕:现浏览了一下24章COM,然后扫了一眼30章ATL&ACTIVEX,过去看的时候根本就是打马虎眼,粗粗看过去的。没有实际的使用,根本体会不到上面说的。

结果,发现要看看第8章使用Activex控件:(有几个小小的所得)

1。EX08A中使用Calender控件的时候,是插入在一个Dialog资源中的。所以使用非常方便。

2。在例子之后Ex08B之前,有一段大概20行的一段:“运行时创建ActiveX控件”讲的就是这个情况。

我先看看能不能搞定。还请大家指教。
hillfree 2002-01-11
  • 打赏
  • 举报
回复
哎,发现自己还是基本功太差。

用的时候只要可以work,就万事大吉。知其然不知其所以然。结果只要出了问题就傻眼了。

唉,看来COM, OLE,和ActiveX还是要找几本书好好看看才行呀。

那位大侠用过,还请多多指教啊。
hillfree 2002-01-11
  • 打赏
  • 举报
回复
呵呵,搞定了,在加入成员的那个窗口类中调用一下它的Create()就行了。

一个新问题:那么如果在非窗口类中是不是不能使用ActiveX控件呢?(不好意思,我这部分的概念比较昏。)

//老潘那本《原理与应用》俺也看过一些,因为连做一个试验,写个例子都要从零开始比较困难。所以就放下了。总是想怎么傻瓜怎么来。唉,土呀。
wyzegg 2002-01-10
  • 打赏
  • 举报
回复
我也遇到这样的问题,不知道什么原因

hillfree 2002-01-10
  • 打赏
  • 举报
回复
试了一个办法,还是不行。
比如:我把这个组件插入到一个FormView中,并将其声明为一个成员。

1。在FormView的OnInitialUpdate中调用m_Alert.memfunction();没有问题。

2。在formView中声明一个公用方法Notification{ m_Alert.memfunction()};

3. 在其他地方得到这个View的指针后。pView->Notification(),间接调用。也不行!!!
也是说not an Ole control!!!


望大家给点想法。谢谢了。
leonadoromario 2002-01-10
  • 打赏
  • 举报
回复
有对话框就使用对话框
没有对话框就创建一个对话框

3,245

社区成员

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

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