<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>COM</title><link>http://blog.vckbase.com/jackliu/category/334.html</link><description>COM</description><managingEditor>肉丝</managingEditor><dc:language>zh-CHS</dc:language><generator>.Text Version 0.958.2004.214</generator><item><dc:creator>肉丝</dc:creator><title>复合文件的操作技巧</title><link>http://blog.vckbase.com/jackliu/archive/2007/03/27/25072.html</link><pubDate>Tue, 27 Mar 2007 06:29:00 GMT</pubDate><guid>http://blog.vckbase.com/jackliu/archive/2007/03/27/25072.html</guid><wfw:comment>http://blog.vckbase.com/jackliu/comments/25072.html</wfw:comment><comments>http://blog.vckbase.com/jackliu/archive/2007/03/27/25072.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blog.vckbase.com/jackliu/comments/commentRss/25072.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/jackliu/services/trackbacks/25072.html</trackback:ping><description>在我的项目中有个地方需要存储自己的文件结构，使用微软的复合文件存储API是比较好的方法， 复合文件中的提法及存储方式我就不介绍了。（两个名词，存储Storage--IStorage, 流Stream--IStream)&lt;BR&gt;以下主要对一个存在的文件或存储进行修改的方法：（其实也不重要，但是很容易忽略)&lt;BR&gt;&lt;BR&gt;HRESULT hr = S_FALSE; //具体原因为啥用S_OK, S_FALSE参考COM&lt;BR&gt;wchar_t wszFileName[] = L"c:\\mydoc.txt"; //复合文件路径&lt;BR&gt;&lt;BR&gt;IStroage *pRootStg = NULL; //根存储&lt;BR&gt;if(::StgIsStorageFile(wszFileName) == S_OK)&lt;BR&gt;{ &lt;BR&gt;    //是个复合文件&lt;BR&gt;   hr = ::StgOpenStorage(wszFileName, NULL,  STGM_READWRITE | STGM_SHARE_EXECLUSIVE | STGM_DIRECT, NULL, 0, &amp;pRootStg);&lt;BR&gt;    if(hr == S_OK)&lt;BR&gt;   {&lt;BR&gt;       //打开成功&lt;BR&gt;   }&lt;BR&gt;&lt;BR&gt;}&lt;BR&gt;else&lt;BR&gt;{&lt;BR&gt;    //错误的复合文件格式&lt;BR&gt;   hr = ::StgCreateDocfile(wszFileName, STGM_READWRITE| STGM_SHARE_EXCLUSIVE |STGM_DIRECT|STGM_CREATE,&lt;BR&gt;     0, &amp;pRootStg);&lt;BR&gt;   if(hr == S_OK)&lt;BR&gt;   {&lt;BR&gt;     //打开成功&lt;BR&gt;   }&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;对于流也是一样的用法， 总之一句话。 如果想在原来的基础上增加子存储或节点的话， 不用能CreateStorage与CreateStream， 得用打开-&gt;创建方式.&lt;BR&gt;&lt;BR&gt;&lt;img src ="http://blog.vckbase.com/jackliu/aggbug/25072.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>肉丝</dc:creator><title>IPicture接口中的数据保存方法</title><link>http://blog.vckbase.com/jackliu/archive/2007/01/26/24239.html</link><pubDate>Fri, 26 Jan 2007 02:08:00 GMT</pubDate><guid>http://blog.vckbase.com/jackliu/archive/2007/01/26/24239.html</guid><wfw:comment>http://blog.vckbase.com/jackliu/comments/24239.html</wfw:comment><comments>http://blog.vckbase.com/jackliu/archive/2007/01/26/24239.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.vckbase.com/jackliu/comments/commentRss/24239.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/jackliu/services/trackbacks/24239.html</trackback:ping><description>&lt;P&gt;因为IPicture接口提供了SaveAsFile，实际上是保存在IStream(流)中，那么就可放剪切板或者保存在文件中，但是此时所占用的大小与原先装入(OleLoadPicture)时的大小不一致，因为被m$修改了啦。&lt;BR&gt;&lt;BR&gt;方法如下:&lt;BR&gt;&lt;BR&gt;HGLOBAL hGlobal = ::GlobalAlloc(GMEM_MOVEABLE, 0); //因为你不知道图像存储需要多少空间，所以设置为0&lt;BR&gt;if(hGlobal)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IStream* pStream = NULL;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HRESULT&amp;nbsp;&amp;nbsp;hr =&amp;nbsp;::CreateStreamOnHGolbal(hGlobal, TRUE, &amp;amp;pStream);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(SUCCEEDED(hr))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LONG cbSize = 0;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hr = pPicture-&amp;gt;SaveAsFile(pStream, FALSE,&amp;nbsp; &amp;amp;cbSize);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BYTE* pByte = (BYTE*)&amp;nbsp; ::GlobalLock(hGlobal);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//操作你的数据...&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ::GlobalUnLock(hGlobal);&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;::GlobalFree(hGlobal);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pStream-&amp;gt;Release();&lt;BR&gt;&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;&lt;/P&gt;&lt;img src ="http://blog.vckbase.com/jackliu/aggbug/24239.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>肉丝</dc:creator><title>GetIDispatch的问题</title><link>http://blog.vckbase.com/jackliu/archive/2007/01/19/24097.html</link><pubDate>Fri, 19 Jan 2007 08:12:00 GMT</pubDate><guid>http://blog.vckbase.com/jackliu/archive/2007/01/19/24097.html</guid><wfw:comment>http://blog.vckbase.com/jackliu/comments/24097.html</wfw:comment><comments>http://blog.vckbase.com/jackliu/archive/2007/01/19/24097.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blog.vckbase.com/jackliu/comments/commentRss/24097.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/jackliu/services/trackbacks/24097.html</trackback:ping><description>&lt;P&gt;写了一个MFC ActiveX , 由于程序需要在控件生命周期内都需要使用控件的接口指针通过&lt;BR&gt;GetIDispatch(TRUE)来获取， 但是只要我不释放该指针， 该类的析构函数是无法执行的，另释放执行放在什么地方？ WM_CLOSE,WM_DESTROY？ 这两个是不行的。&lt;BR&gt;&lt;BR&gt;梆菜姐姐看到就好了~~~~~，期待ing......&lt;/P&gt;&lt;img src ="http://blog.vckbase.com/jackliu/aggbug/24097.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>肉丝</dc:creator><title>编写MFC ActiveX的方法时注意事项。</title><link>http://blog.vckbase.com/jackliu/archive/2006/08/29/22136.html</link><pubDate>Tue, 29 Aug 2006 07:19:00 GMT</pubDate><guid>http://blog.vckbase.com/jackliu/archive/2006/08/29/22136.html</guid><wfw:comment>http://blog.vckbase.com/jackliu/comments/22136.html</wfw:comment><comments>http://blog.vckbase.com/jackliu/archive/2006/08/29/22136.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blog.vckbase.com/jackliu/comments/commentRss/22136.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/jackliu/services/trackbacks/22136.html</trackback:ping><description>在MILD中如果编写方法的ID与C++中对应实的定时文件的ID不是增量时，在调用该方法时会出现错误。&lt;BR&gt;&lt;BR&gt;例如MIDL文件：&lt;BR&gt;&lt;BR&gt;[id(10)].....&lt;BR&gt;&lt;BR&gt;[id(12)] void Save();&lt;BR&gt;&lt;BR&gt;则这样就会出时调时错误，对象不支持该属性或方法。&lt;BR&gt;&lt;BR&gt;改成&lt;BR&gt;[id(10)]...&lt;BR&gt;[id(11)]...就OK。&amp;nbsp; &lt;BR&gt;&lt;BR&gt;原因是classview信息造 成的. odl&lt;BR&gt;用Ctrl + w 进去删除名称为空的（Automation栏目)&lt;BR&gt;&lt;img src ="http://blog.vckbase.com/jackliu/aggbug/22136.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>肉丝</dc:creator><title>CoCreateInstance的用法</title><link>http://blog.vckbase.com/jackliu/archive/2004/11/10/1438.html</link><pubDate>Wed, 10 Nov 2004 15:53:00 GMT</pubDate><guid>http://blog.vckbase.com/jackliu/archive/2004/11/10/1438.html</guid><wfw:comment>http://blog.vckbase.com/jackliu/comments/1438.html</wfw:comment><comments>http://blog.vckbase.com/jackliu/archive/2004/11/10/1438.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://blog.vckbase.com/jackliu/comments/commentRss/1438.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/jackliu/services/trackbacks/1438.html</trackback:ping><description>&lt;img src ="http://blog.vckbase.com/jackliu/aggbug/1438.html" width = "1" height = "1" /&gt;</description></item></channel></rss>