int PolylineTest::readFileMoniker() { ComPtr<IStorage> pStorage; ComPtr<IStream> pStream; auto hr = StgOpenStorageEx(kMonikerFileName, STGM_READ | STGM_SHARE_EXCLUSIVE | STGM_DIRECT, STGFMT_STORAGE, 0, NULL, 0, IID_IStorage, (void**)&pStorage); if (FAILED(hr)) return hr; hr = pStorage->OpenStream(kStreamName, NULL, STGM_READ | STGM_SHARE_EXCLUSIVE, 0, &pStream); if (FAILED(hr)) return hr; ComPtr<IMoniker> moniker; OleLoadFromStream(pStream, IID_IMoniker, (void**)&moniker); IBindCtx* pbc; CreateBindCtx(0, &pbc); ComPtr<IPolyline> polyline; hr = moniker->BindToObject(pbc, NULL, IID_IPolyline, (void**)&polyline); if (FAILED(hr)) { return -1; } ComPtr<IPolyline> polyline2; hr = moniker->BindToObject(pbc, NULL, IID_IPolyline, (void**)&polyline2); if (FAILED(hr)) { return -1; } outputPoints(polyline); outputPoints(polyline2); polyline->put_Color(RGB(0xff, 0x00, 0x00)); COLORREF value; polyline->get_Color(&value); assert(value == RGB(0xff, 0x00, 0x00)); return 0; }
int PolylineTest::writeFileMoniker() { ComPtr<IMoniker> moniker; auto hr = CreateFileMoniker(kFileName, &moniker); if (FAILED(hr)) { return -1; } IBindCtx* pbc; CreateBindCtx(0, &pbc); ComPtr<IPolyline> polyline; hr = moniker->BindToObject(pbc, NULL, IID_IPolyline, (void**)&polyline); if (FAILED(hr)) { return -1; } polyline->put_Color(RGB(0xff, 0x00, 0x00)); COLORREF value; polyline->get_Color(&value); assert(value == RGB(0xff, 0x00, 0x00)); ComPtr<IStorage> pStorage; ComPtr<IStream> pStream; hr = StgCreateStorageEx(kMonikerFileName, STGM_WRITE | STGM_SHARE_EXCLUSIVE | STGM_CREATE, STGFMT_STORAGE, 0, NULL, 0, IID_IStorage, (void**)&pStorage); if (FAILED(hr)) return hr; hr = pStorage->CreateStream(kStreamName, STGM_WRITE | STGM_SHARE_EXCLUSIVE | STGM_CREATE, 0, 0, &pStream); if (FAILED(hr)) return hr; OleSaveToStream(moniker, pStream); return 0; }
int BookServerTest::createFileMoniker() { ComPtr<IMoniker> moniker; auto hr = CreateFileMoniker(kFileName, &moniker); if (FAILED(hr)) { return -1; } IBindCtx* pbc; CreateBindCtx(0, &pbc); ComPtr<IBook> book; hr = moniker->BindToObject(pbc, NULL, IID_IBook, (void**)&book); if (FAILED(hr)) { return -1; } ComPtr<IStorage> pStorage; ComPtr<IStream> pStream; hr = StgCreateStorageEx(kMonikerFileName, STGM_WRITE | STGM_SHARE_EXCLUSIVE | STGM_CREATE, STGFMT_STORAGE, 0, NULL, 0, IID_IStorage, (void**)&pStorage); if (FAILED(hr)) return hr; hr = pStorage->CreateStream(kStreamName, STGM_WRITE | STGM_SHARE_EXCLUSIVE | STGM_CREATE, 0, 0, &pStream); if (FAILED(hr)) return hr; OleSaveToStream(moniker, pStream); return 0; }
int BookServerTest::readFileMoniker() { ComPtr<IStorage> pStorage; ComPtr<IStream> pStream; auto hr = StgOpenStorageEx(kMonikerFileName, STGM_READ | STGM_SHARE_EXCLUSIVE | STGM_DIRECT, STGFMT_STORAGE, 0, NULL, 0, IID_IStorage, (void**)&pStorage); if (FAILED(hr)) return hr; hr = pStorage->OpenStream(kStreamName, NULL, STGM_READ | STGM_SHARE_EXCLUSIVE, 0, &pStream); if (FAILED(hr)) return hr; ComPtr<IMoniker> moniker; OleLoadFromStream(pStream, IID_IMoniker, (void**)&moniker); IBindCtx* pbc; CreateBindCtx(0, &pbc); ComPtr<IBook> book; hr = moniker->BindToObject(pbc, NULL, IID_IBook, (void**)&book); if (FAILED(hr)) { return -1; } ComBSTR name; book->get_name(&name); assert(name == kBookName); return 0; }
int BookServerTest::readItemMoniker() { ComPtr<IStorage> pStorage; ComPtr<IStream> pStream; auto hr = StgOpenStorageEx(kMonikerFileName, STGM_READ | STGM_SHARE_EXCLUSIVE | STGM_DIRECT, STGFMT_STORAGE, 0, NULL, 0, IID_IStorage, (void**)&pStorage); if (FAILED(hr)) return hr; hr = pStorage->OpenStream(kStreamName, NULL, STGM_READ | STGM_SHARE_EXCLUSIVE, 0, &pStream); if (FAILED(hr)) return hr; IBindCtx* pbc; CreateBindCtx(0, &pbc); ComPtr<IMoniker> bkMoniker; OleLoadFromStream(pStream, IID_IMoniker, (void**)&bkMoniker); { ComPtr<IBook> book; ComPtr<IBook> book2; auto hr = bkMoniker->BindToObject(pbc, NULL, IID_IBook, (void**)&book); assert(book); //hr = bkMoniker->BindToObject(pbc, NULL, IID_IBook, (void**)&book2); //assert(book2); } { ComPtr<IMoniker> chMoniker; CreateItemMoniker(L"!", L"chapter0", &chMoniker); ComPtr<IChapter> chObj; hr = chMoniker->BindToObject(pbc, bkMoniker, IID_IChapter, (void**)&chObj); if (FAILED(hr)) return hr; ComBSTR chName; chObj->get_name(&chName); assert(chName == L"概述"); } { ComPtr<ISection> secObj; ComPtr<IMoniker> chMoniker; ComPtr<IMoniker> secMoniker; CreateItemMoniker(L"!", L"chapter0", &chMoniker); CreateItemMoniker(L"!", L"section0", &secMoniker); ComPtr<IMoniker> composeMoniker; chMoniker->ComposeWith(secMoniker, FALSE, &composeMoniker); hr = composeMoniker->BindToObject(pbc, bkMoniker, IID_ISection, (void**)&secObj); if (FAILED(hr)) return hr; ComBSTR name; secObj->get_name(&name); } //ComPtr<IMoniker> secMoniker; //CreateItemMoniker(L"!", L"section0", &secMoniker); //ComPtr<ISection> secObj; //hr = secMoniker->BindToObject(pbc, bkMoniker, IID_ISection, (void**)&secObj); //if (FAILED(hr)) // return hr; //ComBSTR secName; //secObj->get_name(&secName); //assert(secName == L"how to read this book"); //chObj = NULL; //ComPtr<IMoniker> composeMoniker; //hr = bkMoniker->ComposeWith(chMoniker, FALSE, &composeMoniker); //if (FAILED(hr)) // return hr; //composeMoniker->BindToObject(pbc, NULL, IID_IChapter, (void**)&chObj); //chObj->get_name(&chName); //assert(chName == L"概述"); //CreateGenericComposite(bkMoniker, chMoniker, &composeMoniker); return 0; }