我们正在 Visual Studio 2005 下使用 Compact Framework 为设备进行开发。但是,我们也希望制作该软件的模拟版本,在 PC 上运行(最好通过构建配置进行选择)。
然而,.vsproj 文件似乎是特定于设备的;例如,无法仅通过更改目标来使用完整的 .NET 框架。
有没有办法解决?我想我们可以在 PC 上运行紧凑框架,但该项目仍然无法以 ARM 处理器为目标,否则我认为 JIT 编译器将为 PC 生成无法使用的代码?
You can在常规 Windows 中运行 Compact Framework 应用程序(也许)。然而,这有两个主要的潜在问题。
首先,由于紧凑框架中缺少完整框架中存在的某些表单和控件属性,因此您的应用程序在 Windows 中的行为会有点奇怪。例如,在完整框架中,表单具有 StartPosition 属性,该属性确定表单首次创建时在屏幕上显示的位置。此属性在紧凑框架中不存在(出于明显的原因),因此当您在常规 Windows 中运行 CF 应用程序时,表单会选择默认的 StartPosition 值WindowsDefaultLocation
,这意味着设置窗体的 Left 和 Top 属性不会影响它们的显示位置,因此窗体会在任何位置弹出。
其次,CF 中的任何 Windows API PInvoke 调用都必须引用“coredll”,而完整框架中的相同调用则引用“user32”、“winmm”等。解决此问题的一种方法是执行以下操作:
[DllImport("winmm.dll", EntryPoint="waveOutReset")]
private static extern int waveOutResetFULL(IntPtr hWaveIn);
[DllImport("coredll.dll", EntryPoint="waveOutReset")]
private static extern int waveOutResetCF(IntPtr hWaveIn);
public static int waveOutReset(IntPtr hWaveIn)
{
if (Environment.OSVersion.Platform == PlatformID.WinCE)
{
return waveOutResetCF(hWaveIn);
}
else
{
return waveOutResetFULL(hWaveIn);
}
}
还有其他方法可以做到这一点。
对于第一组问题,一个解决方案是当应用程序在常规 Windows 中运行时,通过反射设置紧凑框架中缺少的属性。我认为更好的选择是将 UI 的所有元素封装为 UserControl,每个元素托管在一个“主”UserControl 上,该“主”UserControl 根据需要创建和处置其他 UserControl 元素。然后,您可以将单个“主”UserControl 托管在表单的单个实例上。
顺便说一句,我为一家大型造船厂编写了一个应用程序,它正是执行此操作(在 Windows 和 Windows Mobile 设备上运行),并且仍在使用中。事实上,当造船厂因安全原因暂时停止使用移动设备时,该应用程序在两种环境中运行的能力确实挽救了它的生命。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)