随笔分类 -  COM

摘要:可以聚合的com需要在内部实现一个代理INondelegatingUnknown接口,并在类厂创建第一个接口的时候,检查 // iid must be IID_IUnknown for aggregating if ( ( pUnknownOuter != NULL ) && ( iid != IID_IUnknown ) ) {      return CLASS_E_NOA... 阅读全文
posted @ 2010-07-25 12:03 sosopop 阅读(817) 评论(0) 推荐(0)
摘要:之前我们实验的是在多个线程中创建不同的套间,并且在每个线程中都分别创建单独的com对象。这次实验的是在一个线程中创建对象,然后将对象传递到另外一个线程,再进行调用。我们知道com中是不允许直接把接口指针从一个线程从直接传递到另外一个线程的,当需要传递的时候需要先从当前线程对接口对象进行列集,并且在另外一个接受的线程进行散集,使用散集后的接口指针调用对象提供的方法。下面直接看代码:先实验APARTM... 阅读全文
posted @ 2010-07-07 20:01 sosopop 阅读(848) 评论(0) 推荐(1)
摘要:通过第一篇文章的实验我们的出了如下的结论:1.如果com组件的线程模型与所处的套间模型不匹配的话,com库将会自动另外开启一个线程,并初始化为与之匹配的线程套间,并在此套间中创建COM对象。比如在单线程套间中创建Free线程模型的com组件或者在多线程套间中调用single或者apartment类型的com组建都会单独创建一个线程来创建组件。因为一个线程只能拥有一种类型的套间。并且我们发现如果多个... 阅读全文
posted @ 2010-06-30 19:15 sosopop 阅读(420) 评论(0) 推荐(0)
摘要:创建一个对话框应用程序进行测试主线程代码CoInitialize( NULL);{ CString str; str.Format(L"threadid:%d ,msg:%d", GetCurrentThreadId(), GetCurrentThreadId()); MessageBox( str, str, MB_OK); ITestShowMsgPtr ptrMsg; HRESULT hr... 阅读全文
posted @ 2010-06-28 15:40 sosopop 阅读(709) 评论(0) 推荐(0)