是否可以在C#中使用Microsoft的Offline Files API?

时间:2011-10-07 21:54:27

标签: c# com

我正在试图弄清楚如何使用C#中的Offline Files API(如果可能的话)。我相信如果API是一个COM API,那么理论上我应该能够使用方法here从C#中调用它。

不幸的是,我不知道它是否是COM API,或者如何判断。 (作为更一般的旁注,任何人都可以告诉我如何判断API是否兼容COM?)

我已经通过声明它来成功调用API中的OfflineFilesQueryStatus函数:

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

但我不确定如何使用接口(即,我不知道如何创建IOfflineFilesCache对象。)

有人可以帮我解释一下吗?

1 个答案:

答案 0 :(得分:3)

嗯,它说

  

使用类ID CLSID_OfflineFilesCache创建此对象作为进程内COM服务器。

从C或C ++,这是对CoCreateObject的调用。只需使用CoCreateObject的.NET替换。我认为运行时可调用包装器/主互操作程序集应该发出元数据,可以使用正常的C#new语法来创建对象。


使用.NET中的脱机文件API对于COM对象来说比平时更难,MSDN解释了原因:

  

不幸的是,您无法通过在Visual Studio解决方案资源管理器中添加对此COM组件的引用来创建MobSync.dll互操作程序集。试图这样做会产生错误。这是因为MobSync.dll与许多COM组件DLL不同,它没有类型库(TLB)信息来支持嵌入其中的COM互操作。

.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#中轻松使用的托管类型。