簡體   English   中英

OpenNETCF 和 Windows 嵌入式標准操作系統

[英]OpenNETCF and Windows Embedded Standard O/S

如果我有一個用 .net Compact Framework 編寫的應用程序(並在 Windows CE 上運行)並且理論上與 Windows 使用 OpenNETCF 的功能兼容,它是否仍然兼容?

例如在 OpenNETCF 的幫助下運行.exe 文件之類的東西。 我假設 OpenNETCF 在后台使用 P/Invoke,這可能會使應用程序與 Windows CE 以外的其他操作系統不兼容。

我沒有在我的代碼中使用 P/Invoke,但我無法確定 OpenNETCF 是否使用。

.net 緊湊框架 2.0 和 windows 嵌入式標准

OpenNETCF 確實廣泛使用 P/Invoke。

它實際上是 Windows CE 及其衍生產品中某些核心操作系統功能的包裝器,在 Compact Framework 中沒有以其他方式實現。 在實踐中,這意味着對 coredll.dll 的廣泛 P/Invoking; Windows CE 的基本操作系統模塊。

Windows 嵌入式標准是 Windows XP。 因此,我不希望您能夠使用 OpenNETCF。

根據您使用的版本,您可能能夠在此處獲取 OpenNETCF 代碼(當然也可以購買最新的),並查看引擎蓋下發生了什么。 此外,您可能會發現,在為 Windows 嵌入式標准編譯時,您對 OpenNETCF 的調用實際上已經實現。

解決此問題的一種方法是創建另一個以該平台為目標的項目,包含完全相同的代碼文件,但不引用 OpenNETCF,然后修復編譯錯誤。

您可以向 CE 項目或 Windows 嵌入式項目添加條件編譯符號,然后像這樣修復錯誤(此示例不適用於 OpenNETCF,但您明白了):

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

顯然,您必須為每個平台創建一個構建,因為輸出的程序集現在會有所不同。

正如 Chris 所指出的,SDF大量使用 coredll P/Invokes。 這並不是說一切都可以,但這肯定是一個雷區。 我傾向於有一個 CF 項目和一個 FFX 項目,並且我有重疊的地方我使用別名,如下所示:

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

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

var thread = new Thread(...);

事情就解決了。

很久以前,我們確實開始了一個有趣的副項目,即為桌面創建一個 coredll “shim” 這意味着桌面上對“coredll”的 ap/invoke 實際上會調用 DLL,這反過來會將調用編組到 kernel32、user32 或其他任何東西。 我們對我們實現的東西的測試(並且那里有很多)表明它工作得很好,所以如果你使用有限的 API 子集,只需將它放到 PC 上可能會使 CF 程序集“正常工作”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM