几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量

几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量 (http://www.dimcax.com/hust/index.php)
-   DirectDWG (http://www.dimcax.com/hust/forumdisplay.php?f=89)
-   -   【转帖】odinitialize crash on mac os (http://www.dimcax.com/hust/showthread.php?t=17738)

yang686526 2009-05-06 09:00 PM

【转帖】odinitialize crash on mac os
 
odinitialize crash on mac osx
odinitialize crash on mac osx
we have written 2 dylibs using dwgdirect 2.5.2 on mac osx:
-- one that reads dwg/dxf files (the reader) and stores the contents in our own objects
-- one that writes dwg/dxf files (the writer) from a collection of our objects
if i read a dwg/dxf file, then immediately try to write the contents to a different dwg/dxf file, the call to odinitialize in the writer dylib gets an access violation. are there known issues when separate dylibs that use dwgdirect are loaded into memory at the same time?
the program loads the libraries dynamically when it needs them. we also have dylibs that read other file formats. if we read a different file format, then write the data to dwg/dxf, it works fine. there only seems to be an issue when both the reader and writer dylibs are loaded at the same time.
we don't run into this problem with our windows version.
the basic logic for the reader is:
odinitialize();
// read data into our own objects
oduninitialize();
so by the time the writer is called, oduninitialize() has been called in the reader.
we are using gcc 4.0 on mac osx 10.4.11, and the universal binary dwgdirect 2.5.2 libraries.
thanks,
bob
dwgdirect uses some static data so it's not safe to use 2 dynamic libraries which are statically linked with dwgdirect in the same application. in such case dll version of dwgdirect should be used (is it the case for your windows configuration?)
theoretically if the 2 dynamic libraries statically linked with dd do not work at the same moment (the first one calls oduninitialize() before the second one calls odinitialize() ) it may work. but it would be more safe to be sure that the first one is unloaded before the second one is initialized.
btw, a few releases ago we had a problem with multiple calls to odinitialize/oduninitialize. the following seqience of calls was crashing:
code:
odinitialize(&svc);
odunitialize();
odinitialize(&svc); // crash
sergey slezkin


所有的时间均为北京时间。 现在的时间是 08:11 PM.