2011-10-07 56 views
1

我想弄清楚如何使用C#中的Offline Files API(如果可能)。我相信,如果API是一個COM API,那麼我理論上可以使用方法here從C#中調用它。是否可以在C#中使用Microsoft的脫機文件API?

不幸的是,我不知道它是否是一個COM API或不知道如何告訴。 (作爲一個更廣泛的方面說明,誰能告訴我如何告訴API是COM兼容?)

我已經成功地通過聲明它喜歡叫從API的OfflineFilesQueryStatus功能:

[DllImport("cscapi.dll")] 
public static extern int OfflineFilesQueryStatus(out bool pbActive, out bool pbEnabled); 

但我不知道如何使用接口(即我不知道如何創建IOfflineFilesCache對象。)

任何人都可以幫我解釋一下嗎?

+1

這絕對是一個COM API。正如您鏈接的文檔所述,「**基於COM的脫機文件API接口**可用於執行所有其他脫機文件操作。」另外,如果您使用C#4.0,則可能需要閱讀http://blogs.msdn.com/b/samng/archive/2009/06/16/com-interop-in-c-4-0。 aspx來查看COM鏈接自您鏈接的舊文章以來如何發生變化。 –

回答

3

好,它說

創建該對象爲使用類ID CLSID_OfflineFilesCache進程內COM服務器。

從C或C++,這將是一個調用CoCreateObject。只需使用.NET替代品CoCreateObject即可。我認爲運行時可調用的包裝器/主互操作程序集應該會發出元數據,以便使用正常的C#new語法創建對象。


使用脫機文件API從.NET是比通常的COM對象比較困難,MSDN解釋了原因:

不幸的是,你不能被添加到一個基準創建MobSync.dll互操作程序集Visual Studio解決方案資源管理器中的此COM組件。試圖這樣做會產生錯誤。這是因爲MobSync.dll與許多COM組件DLL不同,它沒有類型庫(TLB)信息來支持嵌入其中的COM interop。

.NET依賴於類型庫進行interop,但Microsoft僅爲這些接口提供了C/C++頭。隨着一些IDL黑客攻擊,你可以得到它的工作,見Creating a Custom Synchronization Manager Handler sample on MSDN,它有一個「修復」mobsync.dll的配方。您需要執行相同的步驟,但需要使用cscapi/cscobj IDL。

但是到目前爲止,最簡單和最受支持的方法是使用C++/CLI。在那裏你可以直接使用#include SDK頭文件,你也可以定義從C#中很容易使用的託管類型。

+0

謝謝@Ben。我可能完全誤解了COM的工作原理,但如果它是一個COM組件,我不應該在項目中添加對dll的引用嗎?當我嘗試時,我得到: 無法添加對'C:\ Windows \ System32 \ cscobj.dll'的引用。請確保該文件是可訪問的,並且它是有效的程序集或COM組件。 – Eric

+0

@Eric:您不會添加引用,而是添加到COM組件(除了類型庫外,它還使用來自注冊表的信息)。但是,我沒有在COM組件列表中看到任何脫機文件,但它顯示在OLEView中。 –

相關問題