Roger,
I totally agree with you that manifests should probably stay in plugins. I made 
my research out of curiosity. 

I may add that indeed this mechanism looks like you described. Its interesting 
though that problem does disappear only if the executable loaded MSVCRT DLLs. 
If they were not loaded by exe but instead loaded later in DLL loading cascade 
- problem still remained. That was the case with our original app. Exe was 
built with static linking. It was loading our aditional DLL modules dynamically 
(through LoadLibrary). These module were using the same shared MSVCRT DLL libs 
and OSG libs as OSG Plugins. So when these modules loaded, proper MSVCRT DLLs 
were loaded as well. But even after loading these modules attempts to read some 
media with osgDB plugins produced error messages.   

On a side note, I have problems in understanding why removing manifest from 
plugins could save users time if main libs were still built with manifests 
embeded and thus we sitll got the dependecy. Of course its feasible to build 
some application using former version of OSG and former MSVCRT and later update 
OSG plugins only. But who would do this ? It seems highly rare and unprobable 
in practice. But heck, what do I know ? People do so many strange things with 
computers these days ;-)

But I suspect that such Plugins in some way would still depend on MSVCRT lib 
which was used to build them. If they would work that would be great, but if 
they would crash no one would be able to find that the reason that was 
incompatibilty in runtime libs (back to the DLL hell ;-).


Regards,
Wojtek
 
 ----- Original Message ----- 
  From: Roger James 
  To: 'OpenSceneGraph Users' 
  Sent: Thursday, December 13, 2007 2:41 PM
  Subject: Re: [osg-users] [SPAM] Re: Latest SVN: problems with Pluginswithout 
Manifests


  Wojtek,

   

  I think the problem you are hitting here is caused by the windows library 
loading code checking if a module (dll, etc) which has the same base file name 
(i.e. name excluding any path components) as the module to be loaded has 
already been loaded into the process address space. If a matching module is 
found then all the manifest, dll redirection, and dll search path stuff is 
ignored and a handle to the already loaded module is returned.

   

  All the VC8 onwards c runtime dlls have a routine in their initialisation 
code called __check_manifest. This routine attempts to check whether the dll 
has been loaded via the assembly/manifest mechanism and spits out the R6034 
error if it thinks is has not. If you have the c runtime sources (a full 
install of visual studio) you can put a break point on this function and step 
into it to see what is happening. This routine is why trying to load the c 
runtime dlls outside the manifest mechanism is usually a bad idea.

   

  Roger

   


------------------------------------------------------------------------------

  From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Wojciech 
Lewandowski
  Sent: 12 December 2007 14:42
  To: OpenSceneGraph Users
  Subject: [SPAM] Re: [osg-users] Latest SVN: problems with Plugins without 
Manifests

   

  Serge,

   

  I have created a test solution for my case. It is very simple Exec which 
dynamically loads DLL where osgViewer is initalized nad run. It allowed me to 
further narrow the scenario and see where actual problem appears. See attached 
example. In this example Release version will run but Debug version will crash.

   

  Release version works because executable uses shared Mutlithreded DLL CRT but 
Debug version does not because it was built with Mutlithreaded Debug CRT which 
is different than OSG plugin build model.

   

  It seems that everything is ok when both application, dynamicaly loaded 
modules, OSG libs and plugins are build using the same code generation model 
which implies use of the same runtime libs. In our problematic case Apllication 
was actually built with multithreaded static CRT. But modules were built with 
Multithread DLL model.

   

  In our app I could freely change all projects to Multithread DLL / 
Multithread Debug DLL and then problem disappeared.

   

  On the other hand it is perfectly correct approach to build app using one 
environment and dynamic modules/plugins using other environment. This is how 
many plugin sdks work for various comercial apllications.

   

  I wonder what will happen when OSG is built using static linking.

   

  Regards,

  Wojtek Lewandowski

   

  ----- Original Message ----- 

    From: Wojciech Lewandowski 

    To: OpenSceneGraph Users 

    Sent: Tuesday, December 11, 2007 4:39 PM

    Subject: Re: [osg-users] Latest SVN: problems with Plugins without Manifests

     

    Hi, Serge,

     

    Looks like I used the same runtime DLLs and manifest files. Manifests were 
taken from WinSxS and renamed to Microsoft.VC80.CRT.manifest and 
Microsoft.VC80.DebugCRT.manifest. 

     

    Its really puzzling that plugins without manifests work when OSG libs are 
linked with executables but it does not work for our App when they are linked 
with dynamically loaded DLLs.

     

    I saw your recent submission where you reverted Cmake generation for 
manifest linking - before Robert puts them into SVN I actived manifest linking 
in my OSG solution. I gave up. Don't have time for this struggle now. Maybe 
will get back to this later. 

    On many Microsoft manifest related documentation pages they state that 
bulids without manifests are not supported so I wouldn't expect that we may be 
able to resolve this issue.

     

    Thanks,

    Wojtek

     

      ----- Original Message ----- 

      From: Serge Lages 

      To: [EMAIL PROTECTED] ; OpenSceneGraph Users 

      Sent: Tuesday, December 11, 2007 9:34 AM

      Subject: Re: [osg-users] Latest SVN: problems with Plugins without 
Manifests

       

      On Dec 10, 2007 9:49 PM, Wojciech Lewandowski <[EMAIL PROTECTED]> wrote:

        Thanks for assistance,

         

        I will further investigate it. I use XP SP2. Something that may be 
important here is the fact that our app loads OSG dynamically. We have our 
program divided into DLL components and some of these components are linked 
with OSG libs. Components are selected and loaded at run time based on 
application config. So in in this way OSG is also loaded dynamically. It used 
to work flawlessly till now. One more thing, I doubt its related, but these XP 
are Polish language version. 

         

        I assume you have msvcp80d / msvcp80 / msvcr80 and msvcr80d dlls + 
release and debug runtime manifests stored in 3rd party binaries or somewhere 
else on the system path. Where tey are located ? Can you send me these files ? 
I guess manifest should suffice in case you use standard SP80 VS1 redist 
(version 8.0.50727.762) . I took my dlls from Windoiws/WinSxS redist directory 
because I could not find them in the folder where I got VS8 Express installed. 
Maybe manifest should be modified and differ somehow than the one stored in 
WinSxS directory ? If I made a mistake then it must have been a manifest which 
was wrong. 

         


      Hi Wojciech,

      The fact that you load OSG dynamically must be the point that make it 
break... About the msvc*.dll, on my dev machine I use the ones located into 
WinSxS (without putting them into another directory), and when I redistribute 
an app, I put the folder joined to this mail into the main binary folder. 

      The simpliest way to solve it is to make it optional in CMake to generate 
or not the manifests, I will make the change and submit it to Robert this 
morning.

      Cheers,

      -- 
      Serge Lages
      http://www.tharsis-software.com 


----------------------------------------------------------------------------

    _______________________________________________
    osg-users mailing list
    [email protected]
    http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org



------------------------------------------------------------------------------


  _______________________________________________
  osg-users mailing list
  [email protected]
  http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to