首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenNETCF和Windows嵌入式标准操作系统

OpenNETCF和Windows嵌入式标准操作系统
EN

Stack Overflow用户
提问于 2011-05-26 06:25:18
回答 2查看 1.2K关注 0票数 1

如果我有一个用编写的应用程序(在Windows CE上运行),并且理论上与.net Embedded Standard O/S兼容,那么如果它使用OpenNETCF功能,它还会兼容吗?

例如,在OpenNETCF的帮助下运行.exe文件。我假设OpenNETCF在幕后使用P/Invoke,这可能会使应用程序与Windows CE以外的其他操作系统不兼容。

我没有在我的代码中使用P/Invoke,但我不能确定OpenNETCF是否使用。

.net compact framework 2.0 and windows embedded standard

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-26 07:10:03

OpenNETCF确实广泛使用P/Invoke。

它实际上是Windows CE及其衍生产品中某些核心OS功能的包装,这些功能没有在Compact Framework中以其他方式实现。在实践中,这意味着大量调用coredll.dll;Windows CE的基本操作系统模块。

Windows Embedded Standard是Windows XP。出于这个原因,我不希望您能够使用OpenNETCF。

根据您使用的版本,您也许能够获得OpenNETCF代码here (当然也可以购买最新版本),并了解幕后发生了什么。此外,您可能会发现,您对OpenNETCF的调用实际上是在为Windows Embedded Standard编译时实现的。

解决此问题的一种方法是创建另一个针对此平台的项目,该项目包含完全相同的代码文件,但不引用OpenNETCF,然后修复编译错误。

您可以将条件编译符号添加到CE项目或Windows Embedded项目中,然后像这样修复错误(此示例不适用于OpenNETCF,但您应该明白了):

代码语言:javascript
复制
    public static string ExecutingAssembly
    {
        get
        {
#if WindowsCE
            return Assembly.GetExecutingAssembly().GetName().CodeBase;
#else
            return Assembly.GetExecutingAssembly().Location;
#endif
        }
    }

显然,您必须为每个平台创建一个构建,因为输出的程序集现在将是不同的。

票数 2
EN

Stack Overflow用户

发布于 2011-05-26 10:34:19

正如Chris所指出的,SDF大量使用了coredll P/Invokes。这并不是说一切都是如此,但它肯定是一个雷区。我倾向于有一个CF项目和一个FFX项目,在有重叠的地方我会使用别名,如下所示:

代码语言:javascript
复制
#if WindowsCE
using Thread = OpenNETCF.Threading.Thread2;
#else
using Thread = System.Threading.Thread;
#endif

然后在代码中你只需要做你平常的事

代码语言:javascript
复制
var thread = new Thread(...);

事情就解决了。

很久以前我们就开始使用an interesting side project of creating a coredll "shim" for the desktop了。这意味着在桌面上对"coredll“的p/invoke实际上会调用该DLL,而DLL又会将调用编组到kernel32、user32或其他任何地方。我们对我们实现的东西的测试(有相当一部分)表明它工作得很好,所以如果你使用的是有限的API子集,那么只需将它放在PC上就可以使CF程序集“工作”。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6131692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档