2011-10-07 81 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中。 –

相关问题