Bagikan melalui


Metode IJournalReader::ReadFromStream

Mengambil aliran ke file Catatan Jurnal dan mengembalikan aliran XML yang mewakili konten dokumen.

Catatan

Komponen Pembaca Jurnal tidak dapat membaca file Windows Journal yang dibuat oleh komputer yang menjalankan Windows 7 atau yang lebih baru. Antarmuka IJournalReader harus dianggap tidak digunakan lagi atau usang dan tidak boleh digunakan.

Sintaks

HRESULT ReadFromStream(
  [in]          IStream *pJournalFileStream,
  [out, retval] IStream **ppXmlStream
);

Parameter

pJournalFileStream [in]

Objek IStream yang mewakili file Jurnal untuk dibaca.

ppXmlStream [out, retval]

Penunjuk ke alamat objek IStream yang akan menerima aliran XML yang dibuat dengan membaca file Jurnal.

Menampilkan nilai

Jika metode ini berhasil, metode ini mengembalikan S_OK. Jika tidak, kode kesalahan HRESULT akan dikembalikan.

Keterangan

Aliran digunakan untuk menghindari akses langsung ke sistem file dan untuk memungkinkan pilihan metode penguraian XML untuk digunakan.

Contoh

Contoh handler berikut untuk peristiwa Klik tombol membuat instans antarmuka Antarmuka IJournalReader dan menggunakannya untuk membaca file Jurnal yang ada.

void CJntlReaderMFCDlg::OnBnClickedButton1()
{
  IStream* pJntStream;
  IStream* pXmlStream;
  IJournalReader* pJntReader;
  HRESULT hr;
  CString szFileName = "";
  static char BASED_CODE szFilter[] = 
    "Journal files (*.jnt)|*.jnt|All files (*.*)|*.*";
  CFileDialog* fileDialog = new CFileDialog(TRUE, "*.jnt", NULL, 
                                 OFN_FILEMUSTEXIST, szFilter, this);

  // Get the filename from the user by using a File Open dialog
  if (IDOK == fileDialog->DoModal())
  {
    szFileName = fileDialog->GetPathName();

    // Read a JNT file into a memory buffer
    HANDLE hFile = CreateFile(szFileName.GetBuffer(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    
    if (INVALID_HANDLE_VALUE != hFile)
    {
      // Allocate memory to hold the file contents
      DWORD dwFileSize = GetFileSize(hFile, NULL);
      HGLOBAL hGlobal = GlobalAlloc(GHND, dwFileSize);

      if (hGlobal != NULL)
      {
        LPBYTE pData = (LPBYTE)GlobalLock(hGlobal);

        if (pData != NULL)
        {
          DWORD dwRead;

          // Read the Journal file into the pData buffer
          if (ReadFile(hFile, pData, dwFileSize, &dwRead, NULL) && dwRead == dwFileSize)
          {
            // Create an IStream that points to the buffer
            hr = CreateStreamOnHGlobal(hGlobal, FALSE, &pJntStream);

            if (SUCCEEDED(hr))
            {
              // Create a JournalReader object
              hr = CoCreateInstance(CLSID_JournalReader, NULL, CLSCTX_ALL, 
                          IID_IJournalReader, (void**)&pJntReader);

              if (SUCCEEDED(hr))
              {
                // Read in the JNT file by using the JournalReader
                hr = pJntReader->ReadFromStream(pJntStream, &pXmlStream);

                // Display results
                if (SUCCEEDED(hr))
                {
                  DisplayXml(pXmlStream);
                }

                // Clean up
                pXmlStream->Release();
                pJntReader = NULL;
                pJntStream->Release();
              }
            }
          }
          GlobalUnlock(hGlobal);
        }
        GlobalFree(hGlobal);
      }
    }
  }
}

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung
Windows XP Tablet PC Edition [hanya aplikasi desktop]
Server minimum yang didukung
Tidak ada yang didukung
Header
Journal.h (juga memerlukan journal_i.c)
DLL
Journal.dll

Lihat juga

Antarmuka IJournalReader

Referensi Skema Pembaca Jurnal