代码改变世界

在.net CF下使用MapInfo

2008-06-12 11:13  cppguy  阅读(1058)  评论(4编辑  收藏  举报

   首先肯定的是这是可行的。

   MapInfo有针对windows mobile的版本MapX mobile,但截至到最新的5.0,官方还只是提供了evc的SDK,并没有针对.net cf的开发接口。

  但是有了本地的DLL,我们就可以把他制作成.net cf可以调用的ActiveX组件。

  这里我们需要的是关键资料和工具是:

  http://msdn.microsoft.com/zh-cn/library/aa446515.aspx感谢

   Alex Feinman,和他们的Opennetcf。这篇文章向我们指明了方向,Compact Framework目前的Com互操作功能只是完整版.net Framework的子集,CompactFramework不会直接支持ActiveX控件的包容。然而,使用底层的Com功能,通过定义其他类,还是可能实现的。

  Aximp.exe

ActiveX 控件导入程序将 ActiveX 控件的 COM 类型库中的类型定义转换为 Windows 窗体控件。

Windows 窗体只能承载 Windows 窗体控件,即从 Control 派生的类。Aximp.exe 生成可承载于 Windows 窗体上的 ActiveX 控件的包装类。这使您得以使用可应用于其他 Windows 窗体控件的同一设计时支持和编程方法论。

若要承载 ActiveX 控件,必须生成从 AxHost 派生的包装控件。此包装控件包含基础 ActiveX 控件的一个实例。它知道如何与 ActiveX 控件通信,但它显示为 Windows 窗体控件。这个生成的控件承载 ActiveX 控件并将其属性、方法和事件公开为生成控件的属性、方法和事件。

 

  有了以上的理论基础和工具,我们就可以制作出MapInfo的ActiveX控件了。具体步骤是:1:下载AlexFeinman那篇文章中的Host_ActiveX_Controls.msi

       2:安装后根据Flash和media的例子新建MapInfo的工程。大部分代码不是我们写,而是通过3生成

       3:使用Aximp将MapInfo的MapXLib.dll转换为ActiveX控件,当然因为是桌面平台的工具,所以还有一些小bug,很简单,自己修正一下就好了。

     4:2,3两部的代码组合再一起就可以生成我们要的控件了。