Вы можете запустить приложение Compact Framework в обычной Windows (возможно). Однако есть две основные потенциальные проблемы.
Во-первых, поскольку определенные свойства формы и элемента управления, присутствующие в полной платформе, отсутствуют в компактной платформе, ваше приложение будет вести себя немного странно в Windows. Например, в полных формах каркаса есть свойство StartPosition, которое определяет, где формы появляются на экране при их первом создании. Это свойство не существует в компактной среде (по очевидным причинам), поэтому при запуске приложения CF в обычной Windows формы выбирают значение StartPosition по умолчанию, равное WindowsDefaultLocation
, что означает, что настройка свойств Left и Top формы имеет не влияет на то, где они появляются, поэтому формы всплывают везде.
Во-вторых, любые вызовы Windows API PInvoke в CF должны ссылаться на «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);
}
}
Есть и другие способы сделать это.
Что касается первого набора проблем, одним из решений является установка свойств, отсутствующих в компактной структуре, с помощью Reflection, когда приложение работает в обычной Windows. Я думаю, что лучшей альтернативой является инкапсуляция всех элементов вашего пользовательского интерфейса в виде UserControls, каждый из которых размещается на одном «главном» UserControl, который создает и удаляет другие элементы UserControl по мере необходимости. Затем вы можете разместить свой единственный «главный» UserControl в одном экземпляре формы.
Кстати, я написал приложение, которое делает именно это (работает в Windows и на устройствах Windows Mobile) для крупного судостроителя, и оно все еще используется. Фактически, способность этого приложения работать в обеих средах буквально спасла его жизнь, когда использование мобильных устройств на верфи было временно приостановлено по соображениям безопасности.