最近工作需要需要写一个页面中的ActiveX插件,无奈以前对com了解甚少,不求甚解、匆匆忙忙凑了一个,勉强能用,目前遇到几个问题,知道的请指点一二,谢谢:
1。我使用ATL创建了一个工程,增加了两个ATL Object,一个是Single Object类型,一个是Full Control类型,但是在使用的时候(例如在VC的对话框中插入ActiveX组件时,弹出的组件浏览对话框中),找不到前一个类型。请问这是否是正常现象,如果是,我想创建一个没有界面窗口的object,选择什么ATL Object最合适。
2。上面提到Full Control类型的组件可以正常使用,然后我给该object增加了若干属性,但是在VC对话框中插入组件时,组件的属性窗口上找不到我定义的属性,请问如何处理才能在组件属性框中直接编辑我预先定义的属性。(我不需要增加一个独立的组件属性对话框这样的功能,仅仅在通用框架下能够编辑预定义属性即可,就像media player等控件一样),知道的话,给我一些思路或者例子,要是说看看某本书的就算了,火烧屁股了:)此外,还有一个疑惑,对IE页面中应用的Activex插件而言,如果不考虑链接MFC库带来的容量问题,ATL和MFC ActiveX工程写的组件有什么分别,哪一个更为合适。在线等代,及时接贴,谢谢!

解决方案 »

  1.   

    没有界面的组件添加一个single object就行了,在插入ActiveX浏览窗口中是不会出现的,因为他不是ActiveX控件,是一个COM对象VC的属性窗口没有自定义的属性?一种可能是属性添加的外部名称不正确,一种可能是属性添加有误,可以看看idl文件,是否正确添加了属性对于网页上的控件最好使用ATL,但是不如MFC方便,没有一些常用的工具类,如CString,CArray,但是如果配合WTL还是很不错的,WTL提供了CString和CSimpleArray等工具类
      

  2.   

    我比较喜欢用std::string, std::deque,CString在VC6.0里面容易遇到问题。
      

  3.   

    呵呵,心有余而力不足。我刚学COM.
      

  4.   

    to orbit(走了走了)
    谢谢答复,不过第二个问题还是有些疑问,属性应该正确添加了,因为在javascript可以通过脚本访问,而且有正确的结果。不过在插入组件的时候,无论VC的资源编辑器中,还是frontpage中,都无法看到该属性,因而无法设置属性
      

  5.   

    另,我添加属性的时候,是在classview窗口中,选择object,然后右键菜单,选择Add Property,弹出的窗口中没有设置属性外部名称的输入框(ATL工程中),是我操作有误?
      

  6.   

    选择Add Property,弹出的窗口中没有设置属性外部名称的输入框(ATL工程中),是我操作有误?需要设置这个外部名称。
      

  7.   

    你可以在VC帮助里(或微软网站上)搜
    Write ActiveX Controls Using Custom Interfaces Provided by ATL 3.0
    内容,可以找到一个写ATL控件的例子,由MSJ, February在1999写的。
      

  8.   

    to zxyjyzxyjy(星星)
    ATL工程中,在哪里设置外部名称?此外新建了一个MFC ActiveX的工程,查了些资料,感觉是不是这类问题还跟实现IDispatch接口有关?
      

  9.   

    感谢zxyjyzxyjy(星星)的例子工程,经过不懈尝试后,发现只要增加object从IPersistStorageImpl接口继承后,就可以实现在VC资源编辑器中看到预定义的属性。如果创建的控件类型为full,默认就支持了,哎,前面什么眼神可是郁闷的是到此为止了,在frontpage中插入组件还是看不到,各位还有什么办法。
    现在问题可以明确为:
    1。创建ATL工程,所有设置默认
    2。增加ATL Object,选择类型Controls->Full Controls,所有设置默认
    3。在classview中选择刚添加的组件,Add Property
    编译后,在VC的对话框Insert ActiveX Control时,组件的属性框可以看到刚定义的属性,但是在FrontPage中,插入ActiveX控件,组件的属性框上则看不到这些属性。
      

  10.   

    MSDN搜索“Polygon Step 1: Creating the Project”的例子。
      

  11.   

    to sinall() 试了一下Polygon,情况是一样的,还是VC中可以看到,FrontPage看不到,拖了msdn中ATL的另外几个例子,还是如此。看来这个问题已经是一个独立的问题了,还是单独考虑为好,谢谢楼上的热情答复,散分。