Page 1 of 1

wxAutomationObject - вылетает

Posted: Wed May 20, 2009 11:27 am
by sergiokey
Здравствуйте
"Представлюсь" сразу, чтобы потом не забыть:
Windows XP sp2, Visual Studio C++ 2008 Express, wxWidgets 2.8.10. вроде все

дело в том, что при таком простом действии как

Code: Select all

	if (m_Auto.CreateInstance(_T("Word.Application"))) return true;
вылетает в функции wxMBConv::cWC2MB в первой же строчке с аксцесс виолейшном:(
самое обидное, что программа из примеров (oleauto) работает
в чем может быть дело?

вот код:

Code: Select all

class WordFileHandler
{
protected:
	static WordFileHandler s_Instance;
	WordFileHandler();
	virtual ~WordFileHandler();
	wxAutomationObject m_Auto;
	bool m_Created;
	virtual bool Init();
public:
	static WordFileHandler* instance(){return &s_Instance;}
};

WordFileHandler WordFileHandler::s_Instance;

WordFileHandler::WordFileHandler(){
	m_Created = Init();
}

WordFileHandler::~WordFileHandler(){
}

bool WordFileHandler::Init(){
	if (m_Auto.CreateInstance(_T("Word.Application"))) return true;
	return false;
}

Re: wxAutomationObject - вылетает

Posted: Wed May 20, 2009 1:41 pm
by Kolya
sergiokey wrote: в чем может быть дело?
Первым делом в таких случаях надо заставить _не_ работать пример oleauto. Также посмотреть в списце процессов winword.exe

У менят этот код нормально работает:

Code: Select all

	wxAutomationObject wordObject;
	if (!wordObject.CreateInstance(_T("Word.Application")))
	{
		wxMessageBox(_T("Could not create Word object."));
		return;
	}

	if (!wordObject.PutProperty(_T("Visible"), true))
	{
		wxMessageBox(_T("Word is invisible?"));
	}
	return;
Нашел похожую ошибку. Интерестно, что вы там делаете, что оно валится.

Posted: Wed May 20, 2009 4:35 pm
by sergiokey
все супер, все получилось. оказывается не всё можно создавать статически)))
только возникает такая проблема, и не знаю что делать: например у меня нет ворда(ну нету, надо будет установить), а при GetInstance и CreateInstance появляется Warning window с сообщениями :
"Cannot obtain CLSID from ProgID",
"Cannot find an active object".
А мне такое сообщение не надо :x что можно сделать, не подскажите?

Posted: Wed May 20, 2009 4:58 pm
by Kolya
Можно сбрасывать все эти ошибки в другое место при помщи функции

Code: Select all

wxLog::SetActiveTarget

Posted: Wed May 20, 2009 5:10 pm
by sergiokey
wxLog::EnableLogging(false) - вот что спасет)))
спасибо за ответы, Kolya.
Осталось понять как здесь закрыть тему и повысить тебе харизму))) или что на этом форуме)

Posted: Thu May 21, 2009 11:24 am
by tan
sergiokey wrote: спасибо за ответы, Kolya.
Осталось понять как здесь закрыть тему и повысить тебе харизму))) или что на этом форуме)
Ну дык для этого надо принять соответствующий ответ, а не свой.
Сделал это за тебя ;)