我想使用QueryInterface取得一个接口但是总是失败,说不支持这个接口。
后来我查了一下注册表,发现我想用的接口没有在interface的根目录下,而是在另一个接口的下面,当我在根目录下自己建立一个一样的接口后,就可以正常取得了。
我想知道,不改注册表的话怎样才能取得那个接口呢?一定是我使用的方法有问题吧?
知道的请帮帮我,谢谢了

解决方案 »

  1.   

    我想获得的接口是 ISelectText,但是注册表里他位于IPDDomDocument接口的里面,这两个接口都是安装完Adobe Reader 7.0后就有了。
      

  2.   

    一个接口是针对一个对象的,往往有一个总的接口,然后不断地调用QueryInterface(),以获得其他接口,比如:
    IA -> IB -> IC,IC接口只能从IB获取,而不能直接从IA接口获取,因为它们是不同的关系。但IC总是能获得的。要弄清它们的关系,就得靠相关文档,而不是去注册表里盲目查找和修改,COM接口编程,基本上是不会涉及到注册表的。
      

  3.   

    可能,你的PDDomDocument是一个对象,它拥有SelectText对象,你想获得的ISelectText接口就要从IPDDomDocument取得。
      

  4.   

    而IPDDomDocument接口,又需要从其他接口获得。
      

  5.   

    文档里的描述很少,只说IAccessible -> ISelectText;
    ISelectText和IPDDomDocument并没有什么关系;IAccessible 可以转换为IPDDomNode;
    然后IPDDomNode -> IPDDomElement -> IPDDomDocument;不过,改了注册表后确实可以从IAccessible 获得ISelectText接口了。
    可是不改注册表怎样才能获得呢?
      

  6.   

    不行啊,一层一层获得不了,到了最后一层就不行了。
    我想是因为ISelectText和IPDDomDocument确实没什么关系。另外,俺装了Adobe Acrobat 7.0 Professional后,注册表的根目录就有ISelectText了,也可以从IAccessible 获得。可文档里说Adobe Reader 7.0就可以支持啊
      

  7.   

    哪位有兴趣可以用ClassWizad导入AcroPDF.dll(需安装Adobe Reader 7.0)试试看