OpenNETCF 确实广泛使用 P/Invoke。
它实际上是 Windows CE 及其衍生产品中某些核心 OS 功能的包装器,而 Compact Framework 中并未实现这些功能。在实践中,这意味着对 coredll.dll 的大量 P/Invoking;Windows CE 的基本操作系统模块。
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
}
}
显然,您必须为每个平台创建一个构建,因为输出的程序集现在会有所不同。