场景是这样的:
  现有系统是一个Client 和多个 server构成的系统,client 调用 server提供的一组COM接口实现某些功能。但由于业务变更,原来的server已经不能满足需求,此时需要更换server。但由于并没有server的源码,必须重新开发。为了不影响client的工作,新server必须与原server接口相同;所幸,我们找到了原server开发时使用的X.idl和其编译生成的文件。这样必须以原来的*.idl 为基础开发。  于是问题来了。我试图将这个原有的idl引入一个新建的project中,但无论我如何尝试,都无法成功,请问:如和将一个已存在的idl应用于新项目中呢?注意两点:
    1. 旧IDL中的借口是不能动的,包括名称、参数、uuid等等
    2. 在整个工程中,同时有多个项目需要引用旧IDL文件,所以旧IDL文件不能被更改。说明:这还是我之前发的另一个贴的问题。关键是没搞出来,也没搞明白。原帖地址如下:http://topic.csdn.net/u/20101022/14/7228f8e2-245c-451b-9638-a561d11e5154.html?1375777695其中:wangchaoyu2001 和 libinfei8848 的回复对我启发很大,wangchaoyu2001 的工程量比较大还没试,libinfei8848 不知是细节不对还是别的什么原因,总之也没搞出来(我是以新IDL为主做的)。现在我很郁闷,所以一定要搞明白是怎么回事,具体做法,原理等等。
希望各位畅所欲言,本人在此先谢过。
如果各位看重分数,那咱分数也不少给,本人虽然最多只能发100分,但各位也不要怕,不够分咱再开贴!直到把问题搞明白为止。

解决方案 »

  1.   

    所你所说的旧的*.idl和*.h,一定要两个,缺一不可,放到你的工程里面是。
    打开你的工程的idl文件,在
    import "ocidl.idl";下面添加
    import "yourOldName.idl";
      

  2.   

    创建新工程,按照旧 idl 声明接口,然后替换 所有的guid, 
      

  3.   

    问题不难.如楼上所说.
    修改的时候,参照就的idl的类 以及相关接口 ,在工程A中添加相对应的接口.(其实就是ATL的简单对象)
    针对每个简单对象都会有一个对应的C**类,并且c**:I**;
    参考旧的idl中的I**,看它有哪些接口函数,相应的理由Atl向导就可以添加了.
    至于如何添加:在类视图中,找到I**,右键添加函数(属性).这样在对应.h 和 .cpp就有该函数的声明和定义,并且在A中的idl也有该函数的声明.编译的时候,建议每次添加一个接口都编一次idl,减少错误.