使用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