Atl(COM)编程如何在idl文件中使用宏定义(如#ifndefine XXX)

使用Atl进行Arcgis engine二次开发中经常会涉及到多个版本的(9.3、10.0、10.1......)develop kit,在接口声明的时候一般会把具体的接口转换成IUnknow*或者IDispatch*接口对象,而这两个对象是com通用的接口,不需要我们再自己引入:importlib("stdole2.tlb");但是如果这样操作的话就可能导致不能形象的表达出我们实际传递的对象类型,可能造成用户使用错误(毕竟用户不是我们设计人员,不能全部明白其用途),所以我们尽可能的传递原对象接口类型。

如:将IPropertySet*作为方法的参数传递进来,这里面就需要在idl里面引用其所在的库;

应用库代码:

 importlib("..\lib\com93\esriSystem.olb");

这里应用的是9.3版本中的库文件,如果是多个版本代码编译的话可能同时会存在10和10.1的版本库,这时候我们就需要通过宏定义来让编译器有选择编译代码,这样做的好处就是所有版本使用同一套源代码(通过SVN进行团队合作编码),具体带指定的版本,只需要来设定开关(宏标识);

下边是使用cpp_quote添加宏功能,参考代码:

cpp_quote("#ifdef   AE93")
	importlib("..\lib\com93\esriSystem.olb");
cpp_quote("#else")
   cpp_quote("#ifdef  AE10")
          importlib("..\lib\com10\esriSystem.olb");
   cpp_quote("#else")
	      importlib("..\lib\com10.1\esriSystem.olb");
   cpp_quote("#endif")
cpp_quote("#endif")  

相信学过宏用法的人不难来理解上面的语句;其他的宏操作可以以此类推;

时间: 2024-10-16 03:19:49

Atl(COM)编程如何在idl文件中使用宏定义(如#ifndefine XXX)的相关文章

link script(链接器ld吃的文件)中使用宏定义的解决方案

问题:工作中遇到一个需求:需要在ld script中使用类似C语言的define等宏定义来做一些判断和替换 实验: 1:理论上*.c中都能用,是否gcc/ld也支持在ld script中直接用宏呢,结果: arm-linux-ld:xxx.lds:2: ignoring invalid character `#' in expression arm-linux-ld:xxx.lds:2: syntax error 人说水火无情,看来ld和gcc也不给面子啊.这里用的是交叉编译的ld,x86的也是

如何在PDF文件中添加注释功能

PDF文件并不陌生,那么对PDF编辑与添加注释大家是否有了解过?编辑与加注释是不同的,PDF编辑文件是对内容进行编辑修改,能修改原文件中的内容:而添加注释则是在原文件上添加备注,对文件中的重点文字添加下划线等标记.下面分享如何在PDF文件中添加注释功能.   步骤: 1.首先我们可以百度搜索'悦书PDF阅读器',点击进入下载即可. 2.点击菜单栏'+'打开文件,或者直接把文件拖入到阅读器中即可打开.在打开界面中选择PDF文件并点击'打开'即可. 3.打开的PDF文件页面中,选择下方工具栏中的'注

如何在PDF文件中快速查找关键字,这个方法后悔没早点知道

很多时候当我们在阅读和浏览PDF文档的时候,有时候内容比较多,很难一下就看到自己需要查找的内容,如果是用眼睛慢慢看的话不仅浪费时间浪费精力,还会产生视觉疲劳,想要快速找到关键字就需要用查找功能,那么如何在PDF文件中快速查找关键字?这个方法后悔没早点知道,下面就一起来看看吧.软件介绍:想要快速查找关键词就需要一款能够对PDF文件进行编辑和修改的软件,一款比较专业的PDF编辑器,良心推荐迅捷PDF软件,这款软件不仅能够PDF文件进行修改和编辑,还有很多其他的功能,如PDF添加书签,PDF添加背景等

stm32工程建立中关于宏定义和启动文件的选择

在STM32的学习过程中,第一步关于stm32工程的建立就会难倒很多人,因为他不像其他AVR 51单片机这些,options中的配置比较复杂,其中最让人头疼的就是关于c/c++ compiler选项中preprocessor这个选择框,现在我就对其中的两项进行说明,一是为了让以后学习STM32的同学能更快的了解,二是为了让我自己更好的复习. 如上图所示  其中 additional include directories下面的框需要添加工程内头文件所在的路径,'$PROJ_DIR$'表示的是工程

[C/C++]在头文件中使用static定义变量意味着什么

文章出处:http://www.cnblogs.com/zplutor/ 看到有一位同学在头文件中这么写: 1 static const wchar_t* g_str1 = - 2 static const wchar_t* g_str2 = - 这种定义变量的方式我从来没有见过,而且它还能顺利通过编译,于是我很想知道编译器是如何处理这种变量定义的. 定义全局变量时使用static,意味着该变量的作用域只限于定义它的源文件中,其它源文件不能访问.既然这种定义方式出现在头文件中,那么可以很自然地推

iOS开发中使用宏定义提高开发效率

iOS开发中使用宏定义提高开发效率 (2013-07-10 10:47:33) 转载▼ iOS开发中,巧妙的使用宏定义,可以提高开发效率,本篇简单介绍一下宏的定义,设置,应用,并在未来实践中不断追加一些常用的宏定义. 调试Log iPhone应用程序开发调试的时候,在代码中加入NSLog的暴力调试方法是很频繁的,但是在release的时候要删除这些调试代码,那工作量是烦躁,这样的情况下,试用宏就会显得非常的方便. 看下面的例子: #ifdef DEBUG #define LOG(...) NSL

Makefile中进行宏定义

实际上是gcc命令支持-D宏定义,相当于C中的全局#define: gcc -D name gcc -D name=definition Makefile中可以定义变量(和宏很像),但是是给make解释器用的,对所编译的文件完全没有作用. 关键词: Make宏定义 Make传递宏定义 Makefile中添加宏定义 Makefile -D 在Makefile中我们可以通过宏定义来控制源程序的编译.只要在Makefile中的CFLAGS中通过选项-D来指定你于定义的宏即可. 如:CFLAGS +=

linux内核头文件kdev_t.h 宏定义解析

kdev_t.h 宏定义解析 这个header file反正不多,直接原因是--遇到了,就搞定它! dev_t 类型的变量定义在linux/types.h 用来保存设备编号--包括主设备号和次设备号.dev_t 是一个32位的数,其中12位用来表示设备号,其余20位用来表示次设备号. 始终不要对这32位是高12位是主设备号还是低2位是主设备号做出假定,不利于代码的可移植性,始终记得使用宏定义来处理dev_t ! 都在这里了: #define MINORBITS 20 //次设备号的占位数目 #d

内核中的宏定义__init、__initdata和__exit、__exitdata

__init.__initdata和__exit.__exitdata的定义位于<kernel/include/linux/init.h> 1 /* These are for everybody (although not all archs will actually 2 discard it in modules) */ 3 #define __init __section(.init.text) __cold notrace 4 #define __initdata __section