OLE в MFC для ламеров
Наверное, создаешь OLE объект, а дальше на Visual Basic пишешь
на visualbasic-e как-то в MFC не получается... Даже документация от visual basic-а не подходит. Например, всякие разные константы, которыми можно инициализировать входные параметры для функций, скажем, открытия/сохранения, определенные в VB, не определены в C++, и более того, если попытаться как-то более или менее разумно изменить их имена с учетом регистров, то тоже ничего не выходит Компилятор, понимаешь ли, ругается.
Поэтому я и прошу какую-нибудь толковую книжку по OLE
Тынденкс не помогает?
А
неа, потому как инет все время отваливается, а то, что успеваю найти, не подходит
Тут смотрела?
Но если у кого-нибудь все же есть книжки, то буду рада, если Вы ими поделитесь
советую копать в сторону директивы препроцессора #import
CApplication app;
app.CreateDispatch("Word.Application");
app.put_Visible(TRUE);
CDocuments docs = app.get_Documents;
COleVariant var_true( (short)1 );
COleVariant var_false( (short)0 );
COleVariant null_str( "" );
docs.Open( COleVariant(filename
var_true, var_true, var_false, null_str, null_str, var_true, null_str, null_str,
COleVariant(short(0 null_str, var_true, null_str,
COleVariant(short(0 var_false, null_str);
То есть сам ворд запускается нормально, а указанный файл не открывается, вместо файла появляется окно с ошибкой
а че за директива? В смысле, что с ней делать?
CApplication cApp;
cApp.CreateDispatch("Word.Application");
COleVariant vOptlong)DISP_E_PARAMNOTFOUND, VT_ERROR);
try
{
CDocuments cDocs = cApp.get_Documents;
CDoc cDoc = cDocs.Open(COleVariant("c:\\mydoc.doc"
vOpt, vOpt, vOpt, vOpt, vOpt, vOpt, vOpt, vOpt, vOpt, vOpt, vOpt);
cApp.put_Visible(TRUE);
cApp.Activate;
}
catch(COleException *e)
{
LPVOID lpMsg;
::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS, NULL, e->m_sc,
MAKELANGID(LANG_NEUTRAL,
SUBLANG_DEFAULTLPTSTR) &lpMsg,
0, NULL);
::MessageBox(NULL, (LPCTSTR)lpMsg, "COM Error",
MB_OK | MB_SETFOREGROUND);
::LocalFree( lpMsg );
cApp.Quit(vOpt, vOpt, vOpt);
e->Delete;
}
catch(COleDispatchException *e)
{
char msg[512];
sprintf(msg, "Run-time error '%d':\n\n%s",
e->m_scError & 0x0000FFFF, e->m_strDescription);
::MessageBox(NULL, msg, "Server Error",
MB_OK | MB_SETFOREGROUND);
cApp.Quit(vOpt, vOpt, vOpt);
e->Delete;
}
Потом добавляй в cDocs.Open нужные параметры по одному пока не найдёшь проблему. В catch{} соотв-но стоят обработчики ошибок - можешь написать свои.
COleVariant vOptlong)DISP_E_PARAMNOTFOUND, VT_ERROR);
то это означает, что нужно подставить значение по умолчанию? В смысле то значение, которе подставляет VB по умолчанию
Видимо, да, т.к. это означает пустой (empty) параметр.
директива рабоает как-то так: в ней ссылаешься на библиотеку типов, напрямую или через progid
при компиляции компилятор генерирует оберточные классы для всех коклассов (или как они там называются по идее этими обертками довольно удобно пользоваться, хотя они вроде не совместимы с MFC и ATL классами (хотя я в этом не уверен).
ИМХО в твое случае это самый правильный способ
Еще один вопрос. Почему Word-сервер так тормозит?! Моя программа запускает Word.Application, потом открывает в нем один документ, берет его содержимое и закрывает приложение. На эти действия уходит около 5(!) секунд! Как сделать, чтобы он работал побыстрее?
побыстрее низя, можно разве что не закрывая ворд обработать несколько документов а так ему же проинициализироваться нужно, вот если просто ворд запустить, он у тебя сколь грузится...
Ну да, в принципе, логично. Спасибо!
Оставить комментарий
horseman
Интересует какая-нибудь литература по работе с Word&Excel через OLE в Visual C++ (MFC). Все с самого начала для ламеров: типа как открыть word(excel)-файл, как получить доступ к его содержимому, как его сохранить, закрыть и т.д....У кого что-нибудь есть, поделитесь, пожалуйста
Поскольку сетка у меня жутко глючит, то, если есть возможность, вышлите книжки, пожалуйста, на мыло irinamail.ru.
Буду очень признательна!