![]() |
【转帖】import dwf in dwgdirect 2.0.03
import dwf in dwgdirect 2.0.03
import dwf in dwgdirect 2.0.03 for import dwf with dynamic dll i use the code write below. it work fine in debug version but it is a problem in release version. the funcion "importer->import()" generate error when i read "binary dwf v6.0" or "zipped ascii enc.2d st.v6.0". if i import other version it is all ok. i would appreciate any help. i am using vc6 md libraries. pdb = svcs.createdatabase(); oddwfimportptr importer; if (hinstance hinstlib = ::loadlibrary("dd_dwf7import.drx")) { typedef oddwfimportptr (*pimporterfactory) (); if ( pimporterfactory importerfac = (pimporterfactory)getprocaddress( hinstlib, "?createimporter@@ya?av?$odsmartptr@voddwfimport@@ @@xz" ) ) importer = importerfac(); else afxmessagebox("error!"); } else { afxmessagebox("the dd_dwf7import.drx missing"); return false; } odrxobjectptr pt=null; pt=importer->properties()->putat( "database", pdb ); pt=importer->properties()->putat( "dwfpath", odrxvariantvalue( odstring(ilfile )) ); pt=importer->properties()->putat( "password", odrxvariantvalue( odstring("") ) ); pt=importer->properties()->putat( "paperwidth", odrxvariantvalue( 297. ) ); pt=importer->properties()->putat( "paperheight", odrxvariantvalue( 210. ) ); pt=importer->properties()->putat( "preservecolorindices", odrxvariantvalue( false ) ); // you may select which layout to import importer->properties()->putat( "layoutnumber", odrxvariantvalue(odint32(-1)) ); // enables importing hsf 3d model from new dwf files (beta version, use for testing) importer->properties()->putat( "importw3d", odrxvariantvalue(true) ); importer->import();<- error importer = 0; works for me. can you attach an example? vladimir this is an example of file. with autodesk dwf viewer (tm) is ok, with odamfcappdll is ok only with release version of my code don't work. the dll i use is "dd_dwf7import.drx" 217 kb 08/09/2006 18.11 thank's attached files (2.0 kb, 8 views) well. if it does not work in your code, but works in sample, then perhaps you may try to insert you code in the sample and see if it woks? i've no idea what's wrong indeed. vladimir in odamfcappdll you use the code below. i don't know what exactly executecommand function do. i think there is different to use "::loadlibrary("dd_dwf7import.drx")" and "::odrxdynamiclinker()->loadmodule(l"dd_dwf7import.drx")"? mybe this the problem? how i can use loadmodule without executecommand? odrxmoduleptr pmodule = ::odrxdynamiclinker()->loadmodule(l"dd_dwf7import.drx"); if (pmodule.isnull()) { // dwfin command parameters explanation see in \imports\dwf7import\source\dwf7importimpl.cpp, dwfimportcommand::execute() afxmessagebox( _t("dd_dwf7import.drx is missing") ); } else { executecommand(_t("dwfin ~\n\n297 210 no -1 yes")); } last edited by rareba; 18th september 2006 at 06:42 amfff">. you should call loadmodule whether you link to dd_dwf7import.drx or not. if you are not linking with dd_dwf7import.drx, you may obtain hmodule this way: code: odrxmoduleptr pmodule = odrxdynamiclinker()->loadmodule("dd_dwf7import.drx"); hmodule hmodule = reinterpret_cast<hmodule>(pmodule->sysdata()); (all the above is windows specific) vladimir i tried to use loadmodule but i have the problem in the same way. it will be very hard find the problem. i have not more ideas. i wiil appreciate any help. thank's likewise wvk. insert try/catch around the import call, see what exception will you get. try masking/unmasking floating point exceptions. make small sample to reproduce the problem and post it here. vladimir this is a small sample // ilfile name of dwf file // pdb is the oddbdatabaseptr pdb global database // error occur in the second catch bool onimportdwf(char* ilfile) { pdb = svcs.createdatabase(); oddwfimportptr importer; odrxmoduleptr pmodule = odrxdynamiclinker()->loadmodule("dd_dwf7import.drx"); hmodule hmodule = reinterpret_cast<hmodule>(pmodule->sysdata()); if (hmodule) { typedef oddwfimportptr (*pimporterfactory) (); if ( pimporterfactory importerfac = (pimporterfactory)getprocaddress( hmodule, "?createimporter@@ya?av?$odsmartptr@voddwfimport@@ @@xz" ) ) importer = importerfac(); else afxmessagebox("error!"); } else { afxmessagebox("the dd_dwf7import.drx missing"); return false; } odrxobjectptr pt=null; pt=importer->properties()->putat( "database", pdb ); pt=importer->properties()->putat( "dwfpath", odrxvariantvalue( odstring(ilfile )) ); pt=importer->properties()->putat( "password", odrxvariantvalue( odstring("") ) ); pt=importer->properties()->putat( "paperwidth", odrxvariantvalue( 297. ) ); pt=importer->properties()->putat( "paperheight", odrxvariantvalue( 210. ) ); pt=importer->properties()->putat( "preservecolorindices", odrxvariantvalue( false ) ); // you may select which layout to import importer->properties()->putat( "layoutnumber", odrxvariantvalue(odint32(-1)) ); // enables importing hsf 3d model from new dwf files (beta version, use for testing) importer->properties()->putat( "importw3d", odrxvariantvalue(true) ); try { importer->import(); } catch (oderror& err) { odstring msg = svcs.geterrordescription(err.code()); cstring strer=cstring("oderror thrown: "); strer=strer+msg.c_str(); afxmessagebox(strer); return false; } catch (...) { cstring strer=cstring("some general exception thrown during readfile, exiting"); afxmessagebox(strer); dword er; er=::getlasterror(); ################################error occur er=0 ?!?! return false; } importer = 0; return true; } |
所有的时间均为北京时间。 现在的时间是 11:28 AM. |