OpenNETCF和Windows Embedded Standard O / S

问题描述

| 如果我有一个用.net Compact Framework编写(并且在Windows CE上运行)并且理论上与Windows Embedded Standard O / S兼容的应用程序,那么如果使用OpenNETCF功能,该应用程序仍然兼容吗? 例如,借助OpenNETCF运行.exe文件之类的事情。我假设OpenNETCF在后台使用P / Invoke,这可能会使应用程序与Windows CE以外的其他OS不兼容。 我没有在代码中使用P / Invoke,但是我不能确定OpenNETCF是否使用P / Invoke。 .net紧凑框架2.0和Windows嵌入式标准     

解决方法

OpenNETCF确实广泛使用P / Invoke。 它实际上是Windows CE及其衍生产品中某些核心OS功能的包装,而Compact Framework中没有实现该包装。实际上,这意味着对coredll.dll进行大量P /调用。 Windows CE的基本OS模块。 Windows Embedded Standard是Windows XP。因此,我不希望您能够使用OpenNETCF。 根据您所使用的版本,您可能可以在此处获得OpenNETCF代码(当然也可以购买最新版本的代码),并了解幕后的情况。另外,您可能会发现,在为Windows Embedded Standard进行编译时,实际上已经实现了对OpenNETCF的调用。 解决此问题的一种方法是,使另一个项目针对该平台,该平台包含完全相同的代码文件,但不引用OpenNETCF,然后通过修复编译错误进行工作。 您可以将条件编译符号添加到CE项目或Windows Embedded项目中,然后像这样解决错误(此示例不适用于OpenNETCF,但您可以理解):
    public static string ExecutingAssembly
    {
        get
        {
#if WindowsCE
            return Assembly.GetExecutingAssembly().GetName().CodeBase;
#else
            return Assembly.GetExecutingAssembly().Location;
#endif
        }
    }
显然,您将不得不为每个平台创建一个构建,因为现在输出的程序集将有所不同。     ,克里斯指出,SDF大量使用coredll P / Invokes。这并不是说一切都可以,但肯定是一个雷区。我倾向于有一个CF项目和一个FFX项目,并且在有重叠的地方使用别名,如下所示:
#if WindowsCE
using Thread = OpenNETCF.Threading.Thread2;
#else
using Thread = System.Threading.Thread;
#endif
然后在代码中,您只需按常规操作即可
var thread = new Thread(...);
事情就解决了。 很久以前,我们确实开始了一个有趣的附带项目,为桌面创建coredll \“ shim \”。这意味着p /调用桌面上的\“ coredll \”实际上会调用该DLL,这反过来又封送了对kernel32,user32或其他对象的调用。我们对实现的测试(有相当一点)表明它运行良好,因此,如果您使用的是有限的API子集,只需将其放在PC上可能会使CF组件“工作\”。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...