// 智能流指针 CComPtr<IStream> pStream = NULL; LARGE_INTEGER zero = {0,0}; // hGlobal是内存句柄: LPBYTE pChunk = (BYTE *) GlobalLock(hGlobal); // 创建一个空的stream: HRESULT hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream ); pStream->Seek( zero, STREAM_SEEK_SET, NULL ); ULONG pcbWritten = 0; // pChunk现在已经指向我们的巨大内存块; // 我们把这块内存写入IStream流中: pStream->Write (pChunk, dwNumRead, &pcbWritten); // 检查是否全部写入了: ATLASSERT(pcbWritten==dwNumRead); // unlock the data GlobalUnlock(hGlobal); // 剩下的一样,也是让CComPtr <IPersistStream>来调用Load方法加载IStream // Create a stream holder. Load the stream holder from the global stream. // THIS STREAM HOLDER IS INTERITED FROM IPersistStream // And all virtual functions are Modified to handle the object.... CComPtr <IStreamHolder> pHolder = new CComObject <CStreamHolder>; CComPtr <IPersistStream> pHolderStream; hr = pHolder->QueryInterface (IID_IPersistStream, (void **)&pHolderStream); pStream->Seek( zero, STREAM_SEEK_SET, NULL ); pHolderStream->Load(pStream); CComVariant vComData = pHolder; .. .. // // now, you have a big chunk of memory loaded into a ComVariant // // 现在你可以把打包后的CComVariant传递给MSMQMessege的Body属性了: pisMsg->Body = vComData; .. .. //Coder: Aydin T.BAKIR |