Articles of 互

何时以及为何使用CoLoadLibrary?

CoLoadLibrary()的说明与LoadLibraryEx()几乎相同 – 将DLL加载到进程中。 COM类创build函数 – CoCreateInstance()和CoGetClassObject() – 都会将必要的DLL加载到进程中。 那么为什么CoLoadLibrary()首先需要使用,应该如何使用呢?

缩略图shell扩展.NET

有没有人知道在C#中编写的工作在winXP上的缩略图shell扩展? 此外,如果不存在有没有人知道如何实现IExtractImage接口和所有需要在C#中的结构? 提前致谢。 注意:可以使用.NET 4完成,并且所有代码框架都提供了样本,但是没有preVista ose的示例。

在同一台机器上创build对象时,CoCreateInstance()和CoGetClassObject()有什么区别?

我明白,CoCreateInstance查找给定的类id的COM服务器,创build该id的对象实例,并从该对象实例中检索一个接口。 CoGetClassObject()为类IDfindCOM服务器,为该类的id创build类工厂的一个实例,并检索那个类的工厂接口,然后可以用它来创build实际的对象。 当在同一台机器上创build对象时,这些函数还有什么区别? 他们是否以相同的方式工作,但只能导致在完全相同的COM服务器中调用不同的代码?

COM如何select如何编组接口?

就我所知,有三种方法可以在COM中实现编组: typelib编组 代理/存根编组 实现对象的IMarshal 现在组件消费者 (用户)如何select使用哪一个? 它是自己决定的,使用首选的方式,还是它调用一些内置的function,它解决了这个问题呢? 我目前遇到以下情况:我的组件实现了一个自定义接口ICustomInterface ,也是由另一个公司的组件实现的。 我的组件没有一个typelib,并没有实现IMarshal。 系统registry包含具有代理/存根的GUID的HKCR \ Interface {uuidof(ICustomInterface)} \ ProxyStubClsid32密钥,该代理/存根可以跟踪到该另一个公司提供的库。 现在,当我的组件使用者初始化我的组件时,它会调用QueryInterface(),从我的组件中请求IMarshal,当返回E_NOINTERFACE时它什么也不做。 这是为什么 – 为什么不从其他公司的代理/存根库踢?

正确使用P / Invoke

我需要从C#调用外部DLL。 这是标题定义: enum WatchMode { WATCH_MODE_SYSTEM = 0, WATCH_MODE_APPLICATION = 1 }; LONG ADS_API WDT_GetMode ( LONG i_hHandle, WatchMode * o_pWatchMode ); 我在C#中添加了enum和call: public enum WatchMode { WATCH_MODE_SYSTEM = 0, WATCH_MODE_APPLICATION = 1 } [DllImport("AdsWatchdog.dll")] internal static extern long WDT_GetMode(long hHandle, ref WatchMode watchmode); 这会生成一个AccessViolationException。 我知道DLL是'工作',因为我还添加了一个调用GetHandle返回hHandle提到的hHandle 。 我试图改变参数为int ( ref int watchmode ),但得到相同的错误。 没有人知道我可以如何PInvoke上述电话?