У меня есть буфер, который содержит часть документа Office Word. Я хочу использовать COM API для извлечения обычного текста из буфера. Я знаю, как открыть текстовый документ и сохранить его в текстовом документе с помощью COM API, но это не то, что я хочу.
В качестве решения я создаю отображенный в памяти файловый объект и помещаю в него свои данные, а затем я пытался открыть его с помощью COM API, но «Invoke» говорит «Неверный тип переменной».
hMapFile = CreateFileMapping(
INVALID_HANDLE_VALUE, // use paging file
NULL, // default security
PAGE_READWRITE, // read/write access
0, // maximum object size (high-order DWORD)
BUF_SIZE, // maximum object size (low-order DWORD)
szName); // name of mapping object
///....
// copy data to hMapFile
///....
////...
// create an instance of Word Application
///.../// now call open function and send hMapFile instead of a real file
VARIANTARG varg;
varg.vt = VT_BYREF;
//varg.vt = BSTR;
//varg.bstrVal = BSTR(L"F:\\sample2.docx");
varg.byref = hMapFile;
DISPPARAMS dpOpen = { &varg, NULL, 1, 0 };
DISPID dispOpenID;
LPOLESTR szOpenDoc = L"Open";
UINT err = 9;
hr = m_pDocuments->GetIDsOfNames(IID_NULL, &szOpenDoc, 1, LOCALE_SYSTEM_DEFAULT, &dispOpenID);
hr = m_pDocuments->Invoke(dispOpenID, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_METHOD, &dpOpen, &varRetVal, &excepInfo, &err);
Задача ещё не решена.
Других решений пока нет …