我正在试图弄清楚如何使用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
对象。)
有人可以帮我解释一下吗?
答案 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#中轻松使用的托管类型。