From: Carsten N. <car...@gm...> - 2009-11-25 17:33:35
|
Hello Andreas, Andreas Halm wrote: > Thanks for your time. I hoped it would be something simple, something > someone else has already stumbled upon ... hm, it's a linker error on windows, those tend to be more on the nasty side in my experience ;) > But did anybody ever try this? My FC-derived classes are in a Lib which is > then statically linked to the app, but the OpenSG DLLs are dynamically > linked. not sure, I've not tried to build static libs before. Is it necessary that you go this route? > I don't quite understand why the error message says something about > missing dllimport, that just doesn't make sense. oh, wait, sorry for not picking up on this earlier: the class annotations are set up so that they are either __declspec(dllexport) or __declspec(dllimport) depending on whether OSG_COMPILE<LIBNAME>LIB is defined or not. You probably have a OSGMyLibDef.h file that defines a OSG_MYLIB_DLLMAPPING macro? I guess it should be defined to nothing if you are going to build a static MyLib.lib then? > However, I tried explicit template instantiation like this: > > #define OSG_INSTANTIATE_PTR(CLASST) \ > template class TransitPtr < CLASST > ; \ > template class MTRefCountPtr< CLASST, \ > NoRefCountPolicy > ; \ > template class RefCountPtr < CLASST, \ > RecordedRefCountPolicy > ; \ > template class RefCountPtr < CLASST, \ > UnrecordedRefCountPolicy> ; \ > template class RefCountPtr < CLASST, \ > WeakRefCountPolicy > ; \ > template class MTRefCountPtr< CLASST, \ > RecordedRefCountPolicy > ; \ > template class MTRefCountPtr< CLASST, \ > WeakRefCountPolicy > ; > > OSG_BEGIN_NAMESPACE > OSG_INSTANTIATE_PTR(Type1) > OSG_END_NAMESPACE ok, but wasn't the original error about OSG::PointerMFieldBase::operator[] ? > Which interestingly doesn't compile and complains about it could not deduce > a template argument. See OSGRefCountPolicies.h, struct NoRefCountPolicy, > line 198: > > template<class T, class U> > static void convertTransitPtr(T *&pOut, T *&pIn) > { > OSG_ASSERT(false); > } > > Is that really correct, or should it be U*& pIn ? yes, you are right, thanks. Since this is normally never instantiated it was not noticed. Cheers, Carsten |