关于编译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.idl和ocidl.idl,那么AlgoCom.idl和CartoCom.idl是怎么找到的呢?就是在附加包含目录找到的。这里有一个问题,貌似import关键字不支持二级目录,比如import "Include\CartoCom.idl";并不支持。
又比如下图:
上图是设置生成的头文件、c文件(即IID文件)和代理文件的名字。生成的文件默认放在工程目录下。其实还可以在这里指定生成目录的。
很多时候需要包含生成的头文件。其实生成的c文件往往也是需要包含的,否则在链接是会出现无法解析的IID_map之类的错误,那是因为没有使用包含c文件的语句,如:
#include "map.c"
关于编译com工程的一些体会的更多相关文章
- 转:Android开发实践:用脚本编译Android工程
转自: http://ticktick.blog.51cto.com/823160/1365947 一般情况下,我们都是使用Eclipse+ADT插件或者Android studio软件来编译Andr ...
- 如何在编译Xcode-Plugin工程的时候增加Cocoapods依赖
关于如何在编译Xcode-Plugin工程的时候增加Cocoapods依赖 以及在Mac App上使用Cocoapods的时候遇到Library not found for -lPods时的解决办法 ...
- 用批处理编译*.sln工程
原文:用批处理编译*.sln工程 批处理是直接调用Microsoft Visual Studio 8\Common7\IDE\ 目录内的 devenv.exe ,它启动后就是IDE,提供的参数如下: ...
- msbuild 编译指定工程时构建脚本的配置
有时候 ,我们编译windows的exe时,我们不需要编译所以的工程,我们只需要指定某个工程就好了,此时我们使用/t:工程名:Rebuild(如果要编译全部工程就把工程名去掉,即/t:Rebuild) ...
- Delphi:MSBuild编译dproj工程
Delphi之命令行编译工程,传统是用dcc32来编译的,它需要设置一大堆参数. 自Delphi 2007以后,支持MSBuild编译,它直接编译.dproj工程文件,所有编译需要的东西,都已在其中设 ...
- Intellij-idea 如何编译maven工程
小编最近效应项目的要求,学习在idea上编写项目.作为一个新手遇到问题也算是正常的,重要的是把它解决,get新技能. 编写过maven工程的小伙伴们应该都知道怎么在eclipse中编译maven工程: ...
- 使用Ant编译Hadoop工程报错
在win7用Ant编译hadoop工程的时候,遇到了一个报错,如下: org.eclipse.core.runtime.CoreException: D:\workspace\hadoop-1.1.2 ...
- ubuntu下,VSCode采用cmake编译C++工程
首先在VSCode中下载CMake和CMake Tools两个插件. 选中CMake Tools,可以看到在VSCode中如何使用cmake编译C++工程的教程. 官网教程 最重要且最实用,看这个网址 ...
- [Android Pro] ant 编译android工程
参考文章: http://blog.csdn.net/xyz_lmn/article/details/7268582?reload http://hubingforever.blog.163.com/ ...
随机推荐
- C++函数指针相关 & 类成员的指针 & 成员函数的指针
有时候会有指向类成员变量或者成员函数的指针,但是注意,这个指针并不是针对一个地址的指向,而更多的是一个偏移. 同时,支持将父类对象的成员 转为 子类对象的成员指针,如下: 反过来,是不行的.因为父类的 ...
- 7. java操作MongoDB,采用_id查询
转自:https://www.2cto.com/database/201704/633262.html mongodb命令行_id查询方法 直接用ObjectId() db.getCollection ...
- Centos7 ssh免密码登陆
摘要:安装openssl openssl-devel 不过有些centos自带 192.168.161.5 192.168.161.15 本版本用centos7 (192.168.161.5) yu ...
- Spring MVC 注解式
1.注解式控制器简介 一.Spring2.5之前,我们都是通过实现Controller接口或其实现来定义我们的处理器类.已经@Deprecated. 二.Spring2.5引入注解式处理器支持,通 ...
- 基于Java的开源3D游戏引擎jMonkeyEngine
jMonkeyEngine简介 jMonkeyEngine是一款纯Java语言编写的游戏引擎,继承了Java应用跨平台的特性,而且是开放源代码的,遵循BSD开源协议,BSD开源协议用一句简单的话概括就 ...
- Restricted Boltzmann Machines
转自:http://deeplearning.net/tutorial/rbm.html http://blog.csdn.net/mytestmy/article/details/9150213 能 ...
- Bundles软件
Bundle 称为:软件集 或 打包捆绑软件(软件束) Bundle就是一组包含了文件集,软件包或许可程序产品的软件,它们组合在一起为了实现一个特定的功能 快速来列出系统bundle软件 sm ...
- Linux常用系统管理软件
1.BleachBit是一款开源的系统清理工具,它可以释放磁盘空间,保护您的隐私,清除缓存,删除cookies.internet历史.临时文件.日志和丢弃的垃圾文件等,支持清除应用的残留数据,切碎文件 ...
- GCJ1C09C - Bribe the Prisoners
GCJ1C09C - Bribe the Prisoners Problem In a kingdom there are prison cells (numbered 1 to P) built t ...
- CSUOJ 1531 Jewelry Exhibition
Problem G Jewelry Exhibition To guard the art jewelry exhibition at night, the security agency has d ...