我已经为面向 Windows Mobile 6.1 的手持式扫描仪创建了一个解决方案。现在我需要知道是否可以将此解决方案嵌入到 ActiveX 中以在 IE8(非移动设备)上运行。这是在手持设备不可用的情况下的备份。显然扫描功能不起作用,但除此之外,是否可以转换它?我不想管理相同代码的多个副本。
2 回答
不,你不能。Compact Framework 不支持 EE Hosting,因此无法将 Compact Framework 的任何内容直接编译为 COM/ActiveX 对象。
您能否创建一个桌面 C# 项目,然后拉入代码文件并将其编译为 ActiveX 控件?这取决于你想做多少工作。至少,您必须为所有公开的类定义 COM 接口,并为每个属性添加属性,如 Guid、InterfaceType 和 ComVisible 以及 Didpid。您必须确保所有公开的类型都具有 COM 功能并且具有接口。试图保持该代码库仍然可编译,因为您现有的 CF 应用程序本身就是一个巨大的挑战。
当然,你会遇到任何 P/Invokes 的问题(这是一个非常罕见的不需要它们的 CF 应用程序)。您必须在另一个接口(或更多)中抽象它们。UI 级别的任何窗口处理都可能需要更改。
当您完成所有这些工作时,您可能会花费更多时间来完全重写浏览器的应用程序,并且它可能不会像重写那样工作。
这似乎表明在某种程度上是可能的:
http://www.dreamincode.net/forums/topic/38890-activex-with-c%23/
然而,我和另一位开发人员试图在移动浏览器上运行数周,但没有成功。我不知道是项目类型本身还是设备的限制,但它只是不想玩。
正如 ctacke 建议的那样,我会非常重视这个想法。ActiveX 是旧技术,将您限制在 IE 中。如果可以的话,我强烈建议以另一种方式这样做。