com中要在客户端应用服务器端定义的接口ID,有三种方法(不知我说的对不对)
1.#import "xxx.idl"2.#import "xxx.tlb" named_guid3.#include "xxx.h"
  #include "xxx_i.c"这三种方法的区别是什么,各在什么场合下用?
盼望高手给予充分详尽的说明!!!
分不够可以再加!!!!!!!!!!!!!!

解决方案 »

  1.   

    说的没错 还有一种就是直接定义ID
    #define..........
    场合主要看你拥有的是哪种资源 有没有定义文件
      

  2.   

    我在使用ADO时是用的第2种,还有一种就是 mfkzj() 所说的#define不过那个东西更。
    #import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")下面是vc知识库中对该语句的说明:
    这一语句有何作用呢?其最终作用同我们熟悉的#include类似,编译的时候系统会
    为我们生成msado15.tlh,ado15.tli两个C++头文件来定义ADO库。几点说明:
    (1) 您的环境中msado15.dll不一定在这个目录下,请按实际情况修改
    (2) 在编译的时候肯能会出现如下警告,对此微软在MSDN中作了说明,并建议我们不要理会这个警告。
    msado15.tlh(405) : warning C4146: unary minus operator applied to unsigned type, result still unsigned 
      

  3.   

    我也關注! 
    COM 這東西,不用幾次是永遠也記不住的。
      

  4.   

    我发现的问题是:
    用第三种方法时,若客户端引用的是 &IID(接口GUID的地址)。
    就编译不通过,而用第二种方法就可以。何解???????偏偏ATL中的好多class都要求 &IID 模版参数:(
      

  5.   

    其实本质上是一样的。
    有了IDL文件,可用midl编译得到TLB和 .H 和 .C。而#import "xxx.tlb" (也可以是带有类库信息Dll,ocx,exe)
    VC会自动生成 xxx.tlh(Head) 和 xxx.tli.(Implementation & definitions), 将其加入项目编译。