Hi.

Currently, I'm doing a lot of refactoring / reimplementation on my 
software system. One of the tasks among others is porting the beast to 
windows - and that's giving me serious headaches - maybe one of the more 
windows experienced of you can give me a hint here.

Let me shortly sketch my architecture:
I have a program, that uses 2 dlls, called Common.dll (doesn't use 
OpenSG at all) and System.dll (this one does) that are used by the main 
program. While System defines most of the (graphics related) framework, 
all the functionality is encapsulated in plugins that are loaded at 
runtime using dlsym on Linux / LoadLibrary on Windows. For example, 
there are abstract Display and DisplayImp classes defined in the 
System.dll and a derived SimpleSceneManagerDisplay class implemented as 
a plugin (Display_simpleSceneManager.dll).

Everything works perfectly on Linux, but on Windows (using MSVC2005 
Professional, and a 1.8 daily build) the following happens:

If I add OSG::GLUTWindow::create() in a class of my System.dll, it 
returns a valid WindowPtr. But if I use the same call in my plugin, it 
returns NullFC. I use the same compiler / linker options for both 
(attached the debug versions below). Both calls are done in the same thread.

* Under what circumstances returns OSG::GLUTWindow::create() null? After 
looking into the code, the create call copies a prototype and returns it 
- when can that go wrong?
* Is there anything to consider when using OpenSG in a dll that is 
loaded via LoadLibrary? Has anybody had problems with that before?

I also have a second plugin (Scene_default.dll) that does the following 
in its constructor:

    _transform = OSG::ComponentTransform::create();  
    _sceneRootNode = OSG::Node::create();
    beginEditCP(_sceneRootNode);
      _sceneRootNode->setCore(_transform);
      _sceneRootNode->addChild(OSG::makeTorus(1.5,2,32,32));
    endEditCP(_sceneRootNode);

But here, I get valid NodePtrs for _transform and _sceneRootNode, so I 
doubt that this is a general "::create" problem. osgInit is called 
before loading the plugins in the System.dll. But moving it to the 
display plugin had no effect either so this is propably not the cause. 
Ah, and of course, the Tutorials all work fine, so GLUT and all that is 
obviously working. The compiler / linker options are copied from one of 
the tutorials (except that .exe was changed to .dll).

Any ideas?

Thanks in advance,
Dominik

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

MSVC Compiler/Linker options:

Compiler System.dll:
/Od /I "C:\Libs\xerces-c_2_8_0-x86-windows-vc_8_0\include" /I 
"C:\Libs\boost_1_34_1" /I "C:\Libs\OpenSG\include" /I "(lots of 
includes)" /D "WIN32" /D "INTERNAL_SYSTEM" /D "LOGLEVEL=5" /D "_WINDOWS" 
/D "WINVER=0x0400" /D "_WIN32_WINDOWS=0x0410" /D "_WIN32_WINNT=0x0400" 
/D "_OSG_HAVE_CONFIGURED_H_" /D "OSG_BUILD_DLL" /D "_DEBUG" /D 
"OSG_DEBUG" /D "OSG_WITH_GLUT" /D "OSG_WITH_GIF" /D "OSG_WITH_TIF" /D 
"OSG_WITH_JPG" /D "_WINDLL" /D "_MBCS" /Gm /EHsc /RTC1 /MDd /Fo"Debug\\" 
/Fd"Debug\vc80.pdb" /W1 /nologo /c /ZI /TP /errorReport:prompt

Compiler Display_simpleSceneManager.dll
/Od /I "C:\Libs\xerces-c_2_8_0-x86-windows-vc_8_0\include" /I 
"C:\Libs\boost_1_34_1" /I "C:\Libs\OpenSG\include" /I "(lots of 
includes)" /D "WIN32" /D "LOGLEVEL=5" /D "_WINDOWS" /D "WINVER=0x0400" 
/D "_WIN32_WINDOWS=0x0410" /D "_WIN32_WINNT=0x0400" /D 
"_OSG_HAVE_CONFIGURED_H_" /D "OSG_BUILD_DLL" /D "_DEBUG" /D "OSG_DEBUG" 
/D "OSG_WITH_GLUT" /D "OSG_WITH_GIF" /D "OSG_WITH_TIF" /D "OSG_WITH_JPG" 
/D "_WINDLL" /D "_MBCS" /Gm /EHsc /RTC1 /MDd /Fo"Debug\\" 
/Fd"Debug\vc80.pdb" /W1 /nologo /c /ZI /TP /errorReport:prompt

Compiler Scene_default.dll
/Od /I "C:\Libs\xerces-c_2_8_0-x86-windows-vc_8_0\include" /I 
"C:\Libs\boost_1_34_1" /I "C:\Libs\OpenSG\include" /I "(lots of 
includes)" /D "WIN32" /D "LOGLEVEL=5" /D "_WINDOWS" /D "WINVER=0x0400" 
/D "_WIN32_WINDOWS=0x0410" /D "_WIN32_WINNT=0x0400" /D 
"_OSG_HAVE_CONFIGURED_H_" /D "OSG_BUILD_DLL" /D "_DEBUG" /D "OSG_DEBUG" 
/D "OSG_WITH_GLUT" /D "OSG_WITH_GIF" /D "OSG_WITH_TIF" /D "OSG_WITH_JPG" 
/D "_WINDLL" /D "_MBCS" /Gm /EHsc /RTC1 /MDd /Fo"Debug\\" 
/Fd"Debug\vc80.pdb" /W1 /nologo /c /ZI /TP /errorReport:prompt



Linker System.dll:
/OUT:"C:\Dokumente und Einstellungen\iod\Eigene 
Dateien\4DActor2\4DActor2\4DActor2Win\Debug\System.dll" /NOLOGO 
/LIBPATH:"C:\Dokumente und Einstellungen\iod\Eigene 
Dateien\4DActor2\4DActor2\4DActor2Win\Debug" 
/LIBPATH:"C:\Libs\boost_1_34_1\lib" /LIBPATH:"C:\Libs\OpenSG\lib" /DLL 
/MANIFEST /MANIFESTFILE:"Debug\System.dll.intermediate.manifest" /DEBUG 
/PDB:"c:\Dokumente und Einstellungen\iod\Eigene 
Dateien\4DActor2\4DActor2\4DActor2Win\debug\System.pdb" /MACHINE:X86 
/ERRORREPORT:PROMPT Common.lib OSGBaseD.lib OSGSystemD.lib 
OSGWindowGLUTD.lib glut32.lib glu32.lib opengl32.lib tif32.lib 
libjpeg.lib  kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib 
advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib 
odbccp32.lib

Linker Display_simpleSceneManager.dll
/OUT:"C:\Dokumente und Einstellungen\iod\Eigene 
Dateien\4DActor2\4DActor2\4DActor2Win\Debug\Display_simpleSceneManager.dll" 
/NOLOGO /LIBPATH:"C:\Dokumente und Einstellungen\iod\Eigene 
Dateien\4DActor2\4DActor2\4DActor2Win\Debug" 
/LIBPATH:"C:\Libs\boost_1_34_1\lib" /LIBPATH:"C:\Libs\OpenSG\lib" /DLL 
/MANIFEST 
/MANIFESTFILE:"Debug\Display_simpleSceneManager.dll.intermediate.manifest" 
/DEBUG /PDB:"c:\Dokumente und Einstellungen\iod\Eigene 
Dateien\4DActor2\4DActor2\4DActor2Win\debug\Display_simpleSceneManager.pdb" 
/MACHINE:X86 /ERRORREPORT:PROMPT Common.lib System.lib OSGBaseD.lib 
OSGSystemD.lib OSGWindowGLUTD.lib glut32.lib glu32.lib opengl32.lib 
tif32.lib libjpeg.lib  kernel32.lib user32.lib gdi32.lib winspool.lib 
comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib 
odbc32.lib odbccp32.lib

Linker Scene_default.dll
/OUT:"C:\Dokumente und Einstellungen\iod\Eigene 
Dateien\4DActor2\4DActor2\4DActor2Win\Debug\Scene_default.dll" /NOLOGO 
/LIBPATH:"C:\Dokumente und Einstellungen\iod\Eigene 
Dateien\4DActor2\4DActor2\4DActor2Win\Debug" 
/LIBPATH:"C:\Libs\boost_1_34_1\lib" /LIBPATH:"C:\Libs\OpenSG\lib" /DLL 
/MANIFEST /MANIFESTFILE:"Debug\Scene_default.dll.intermediate.manifest" 
/DEBUG /PDB:"c:\Dokumente und Einstellungen\iod\Eigene 
Dateien\4DActor2\4DActor2\4DActor2Win\debug\Scene_default.pdb" 
/MACHINE:X86 /ERRORREPORT:PROMPT Common.lib System.lib OSGBaseD.lib 
OSGSystemD.lib OSGWindowGLUTD.lib glut32.lib glu32.lib opengl32.lib 
tif32.lib  kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib 
advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib 
odbccp32.lib



-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference 
Don't miss this year's exciting event. There's still time to save $100. 
Use priority code J8TL2D2. 
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
_______________________________________________
Opensg-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensg-users

Reply via email to