2011-05-25 94 views
1

如果我有一个应用程序以.net Compact Framework编写(并且在Windows CE上运行)并且理论上与Windows Embedded Standard O/S兼容,如果它仍然兼容使用OpenNETCF功能?OpenNETCF和Windows Embedded Standard O/S

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

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

.net compact framework 2.0 and windows embedded standard

回答

2

OpenNETCF确实使用P /广泛调用。

它实际上是Windows CE及其衍生产品中某些核心操作系统功能的一个包装,它在Compact Framework中没有实现。实际上这意味着coredll.dll的广泛的P/Invoking; Windows CE的基本OS模块。

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

根据您使用的版本,您可能能够获得OpenNETCF代码here(或购买最新的课程),并查看发生了什么。另外,您可能会发现在为Windows Embedded Standard进行编译时,您正在对OpenNETCF进行的调用实际上实现了。

解决这个问题的一种方法是制作另一个项目来定位这个平台,它包含完全相同的代码文件,但没有引用OpenNETCF,然后解决编译错误。

您可以将条件编译符号添加到无论是CE项目或Windows嵌入式项目,然后修复,像这样的错误(这个例子是不是OpenNETCF,但你的想法):

public static string ExecutingAssembly 
    { 
     get 
     { 
#if WindowsCE 
      return Assembly.GetExecutingAssembly().GetName().CodeBase; 
#else 
      return Assembly.GetExecutingAssembly().Location; 
#endif 
     } 
    } 

显然,您将不得不为每个平台创建一个构建,因为输出的组件现在会有所不同。

+0

相关知识。你会知道什么名字空间使用它,哪些不是?我正在使用OpenNETCF。IO; OpenNETCF.Windows.Forms; OpenNETCF.WindowsCE命名空间。我应该假设他们都使用P/Invoke?谢谢 – sarsnake 2011-05-25 23:20:29

+0

OpenNETCF是巨大的,是的,我猜想P/Invoke是用在大多数,如果不是所有的命名空间。不过,我已经详细阐述了可能的发展方向。 – 2011-05-25 23:37:58

2

正如克里斯指出的,SDF使使用coredll P/Invokes。这并不是说所有事情都会发生,但它确实是一个雷区。我往往有一个CF项目和FFX项目和地方在那里我有重叠我使用别名,就像这样:

#if WindowsCE 
using Thread = OpenNETCF.Threading.Thread2; 
#else 
using Thread = System.Threading.Thread; 
#endif 

然后在代码中你只是做你的正常

var thread = new Thread(...); 

和工作的事情出。

现在很多年前,我们确实开始an interesting side project of creating a coredll "shim" for the desktop。这意味着在桌面上“coredll”的p/invoke实际上会调用该DLL,然后将该调用关闭到kernel32,user32或其他任何地方。我们测试了我们实现的内容(并且在那里有一点点),结果表明它工作得很好,所以如果你使用的是有限的API子集,只要把它放在PC上就可以使CF组件“正常工作”。

+1

这是一个有趣的副项目。 – 2011-05-26 11:32:29

相关问题