有个公共IDL文件base.idl, 已经编译成base.tlb
他包含了一个IDL:device.idl, 因为使用了里面的IDevice接口作为参数现在有一个ATL工程, 新建一个COM接口IManager, 然后在CManager右击"实现接口"可是现在IManager也需要IDevice接口作为参数, 所以同样的包含device.idl文件, 
编译时发生: IDevice重定义这个时候怎么办? 难道只能把IDevice*参数改成 IUnkown* 接口指针?

解决方案 »

  1.   

    即然己经生成了tbl,为什么还要加device.idl进来。
      

  2.   

    ldsjlzy(小李)
    如果不加, ATL工程的COM接口IManager的参数使用了 device.idl 里面的接口啊
    否则ATL工程里面的IDL将无法编译通过
      

  3.   

    把device.idl编译成tlb,然后用importlib("device.tlb");代替import "device.idl";
    尽量都使用tlb,少用原始的idl。
      

  4.   

    lxpws(老烦) :
    那请问 接口的方法 使用了device.idl里面的接口作为参数用  importlib("device.tlb");行吗? 是不是得放到 接口定义得前面呢?
    我看IDL精髓 说这样会造成编译出来得tlb会很大?
      

  5.   

    对,放到用它的接口的前面。
    不大吧,里面并没有包含进所引入的库中的内容,只是给个声明,让IDL能编译通过罢了。
      

  6.   

    非常感谢! 晚上回去试试多用tlb,少用原始的idl