zoukankan      html  css  js  c++  java
  • 关于编译com工程的一些体会

    作者:朱金灿

    来源:http://blog.csdn.net/clever101

       

            今天发现com的编译的一个重要一步是微软提供的midl工具将其中的idl文件生成一个头文件、c文件(即IID文件)和代理文件。头文件作为接口文件很好理解,为啥生成一个c文件呢?理由应该是com的一个设计初衷是跨语言调用,而c库一般能跨语言调用的。代理文件的作用暂时还不清楚。

     

             在工程属性里有一栏设置叫MIDL,里面就是有相关MIDL工具如何生成头文件和c文件的一些设置的。如下:

            

              

               比如附加包含目录是指什么呢?就是说这个com工程要使用其它com工程定义的类型,那么它的idl文件就要导入其它工程的idl文件,具体的语法如下:

    import "oaidl.idl";
    import "ocidl.idl";
    import "AlgoCom.idl";
    import "CartoCom.idl";

            除开系统提供的oaidl.idlocidl.idl,那么AlgoCom.idlCartoCom.idl是怎么找到的呢?就是在附加包含目录找到的。这里有一个问题,貌似import关键字不支持二级目录,比如import "IncludeCartoCom.idl";并不支持。


           又比如下图:       


           上图是设置生成的头文件、c文件(即IID文件)和代理文件的名字。生成的文件默认放在工程目录下。其实还可以在这里指定生成目录的。

     

           很多时候需要包含生成的头文件。其实生成的c文件往往也是需要包含的,否则在链接是会出现无法解析的IID_map之类的错误,那是因为没有使用包含c文件的语句,如:

    #include "map.c"


  • 相关阅读:
    hdu 1199 Color the Ball 离散线段树
    poj 2623 Sequence Median 堆的灵活运用
    hdu 2251 Dungeon Master bfs
    HDU 1166 敌兵布阵 线段树
    UVALive 4426 Blast the Enemy! 计算几何求重心
    UVALive 4425 Another Brick in the Wall 暴力
    UVALive 4423 String LD 暴力
    UVALive 4872 Underground Cables 最小生成树
    UVALive 4870 Roller Coaster 01背包
    UVALive 4869 Profits DP
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6470211.html
Copyright © 2011-2022 走看看