OpenNETCF и Windows Embedded Standard O / S - PullRequest
1 голос
/ 26 мая 2011

Если у меня есть приложение, написанное на .net Compact Framework (и работающее в Windows CE) и теоретически совместимое с Windows Embedded Standard O / S, будет ли оно по-прежнему совместимым, если оно будет использовать функциональность OpenNETCF? *

Например, запускать файлы .exe с помощью OpenNETCF. Я предполагаю, что OpenNETCF использует P / Invoke под капотом, что может сделать приложение несовместимым с другими ОС, кроме Windows CE.

Я не использую P / Invoke в своем коде, но я не могу точно ответить, работает ли OpenNETCF или нет.

.net Compact Framework 2.0 и Windows Embedded Standard

Ответы [ 2 ]

2 голосов
/ 26 мая 2011

Как указывает Крис, SDF делает тяжелым использование coredll P / вызывает.Это не значит, что все делает, но это, безусловно, минное поле.У меня, как правило, есть проект CF и проект FFX, и в местах, где у меня есть перекрытия, я использую псевдонимы, например:

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

Затем в коде вы просто делаете обычные

var thread = new Thread(...);

И все получается.

Давным-давно мы запустили интересный побочный проект создания coredll "shim" для рабочего стола .Это означает, что ap / invoke для «coredll» на рабочем столе на самом деле будет вызывать эту DLL, которая, в свою очередь, будет перенаправлять вызовы на kernel32, user32 или что-то еще.Наше тестирование того, что мы реализовали (и это справедливо) показало, что оно работало просто отлично, поэтому, если вы используете ограниченное подмножество API, простое добавление его на ПК может заставить сборку CF «просто работать».

2 голосов
/ 26 мая 2011

OpenNETCF широко использует P / Invoke.

По сути, это оболочка для некоторых основных функций ОС в Windows CE и ее производных, которые иначе не реализованы в Compact Framework. На практике это означает обширный P / Invoking для coredll.dll; базовый модуль ОС для Windows CE.

Windows Embedded Standard - это Windows XP. По этой причине я не ожидаю, что вы сможете использовать OpenNETCF.

В зависимости от используемой версии вы можете получить код OpenNETCF здесь (или купить последнюю версию, конечно) и посмотреть, что происходит под капотом. Кроме того, вы можете обнаружить, что вызовы, которые вы делаете для OpenNETCF, фактически выполняются в любом случае при компиляции для Windows Embedded Standard.

Одним из способов решения этой проблемы является создание другого проекта для этой платформы, содержащего точно такие же файлы кода, но без ссылки на OpenNETCF, а затем устранение ошибок компиляции.

Вы можете добавить Условный символ компиляции либо в проект CE, либо в проект Windows Embedded, затем исправить ошибки следующим образом (этот пример не для OpenNETCF, но вы поняли идею):

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

Очевидно, что тогда вам придется создавать сборку для каждой платформы, поскольку выводимые сборки теперь будут другими.

...