![]() |
【转帖】initialized myservices
initialized myservices?
initialized myservices? i initialize api of the following way: code: //create a custom services instance. odstaticrxobject<myservices> svcs_; //inicializamos dwgdirect boost::format berr ("\nerror al inicializar directdwg: %1%"); try { odinitialize(&svcs_); } catch (const oderror& e) { berr % berr % svcs_.geterrordescription(e.code()); std::cout << berr.str().c_str() << std::endl; return false; } have some way to know if api this already initialized? with svcs i can know if this initialized? sorry for my english great calvet there is no direct way. you may use this workaround: code: bool isddinitialized() { try { ::odrxsystemservices(); return true; } catch(oderror& e) { return false; } } odrxsystemservices will throw oderror(enotinitializedyet) if dd is not initialized. (btw, there is nothing wrong with second initialization - it will just increase internal refcounter) vladimir the error happens when reading for the second time .dwg in the following call... code: return readfile(odsystemservices()->createfile(filename, ndesiredaccess, sharemode), allowcpconversion, partialload, password); some idea the reason for this exception? thx calvet quote: originally posted by 1cacalvo the error happens when reading for the second time .dwg in the following call... code: return readfile(odsystemservices()->createfile(filename, ndesiredaccess, sharemode), allowcpconversion, partialload, password); some idea the reason for this exception? thx calvet what kind of error? can it be reproduced in our samples? vladimir i have this console application... code: // directiniterror.cpp: define el punto de entrada de la aplicaci髇 de consola. #include "stdafx.h" #include <odacommon.h> #include <dbdatabase.h> #include <dbblockreference.h> #include <exservices/exsystemservices.h> #include <exservices/exhostappservices.h> #include <exservices/odfilebuf.h> #include "dwgapp.h" int _tmain(int argc, _tchar* argv[]) { { std::string str("d:/aplic/b14_sg/resources/circle.dwg"); dwgapp app; app.launch(); if (!app.loaddocument(str)) { return false; } app.quit(); } { std::string str("d:/aplic/b14_sg/resources/line.dwg"); dwgapp app; app.launch(); //the error be produced in this moment if (!app.loaddocument(str)) { return false; } app.quit(); } } whit this class: code: #include <dbblockreference.h> #include <exservices/exsystemservices.h> #include <exservices/exhostappservices.h> #include <exservices/odfilebuf.h> class myservices : public exsystemservices, public exhostappservices { protected: odrx_using_heap_operators(exsystemservices); private: #ifdef _msc_ver bool getpassword(const odstring& dwgname, bool /*isxref*/, odpassword& password) { return true; } #endif }; class dwgapp { public: virtual bool launch(); virtual void quit(); bool loaddocument(const std::string& docpath); private: odstaticrxobject<myservices> svcs_; oddbdatabaseptr pdbdocument_; }; #endif implementation: code: #include "stdafx.h" #include "dwgapp.h" bool dwgapp::launch() { try { odinitialize(&svcs_); } catch (const oderror& e) { return false; } return true; } void dwgapp::quit() { svcs_.release(); } bool dwgapp::loaddocument(const std::string& docpath) { odstring oddocpath (docpath .c_str()); try { pdbdocument_ = svcs_.readfile(oddocpath, true, false, oda::ksharedenyno); return true; } catch (const oderror& e) { } return false; } you should either call oduninitialize in quit(), or not destroy services object vladimir thanks to answer so fast. i put the function "oduninitialize();" in my method "quit", but with this the applicati髇 try the exception when the application leaves the first method. code: { std::string str("d:/aplic/b14_sg/resources/circle.dwg"); dwgapp app; app.launch(); if (!app.loaddocument(str)) { return false; } app.quit(); //in this point try the exception } the exception is sent by oddbdatabase when it destroys smartpointer... in order to solve i have removed it oddbdatabase from the class and i have passed it through parameter to the loaddocument method thanks from spain... |
所有的时间均为北京时间。 现在的时间是 08:34 AM. |