I see nothing wrong in deregistering the class, or rather ignoring that it is 
already registered. I think we can easily apply the patch. 

If all this work for you in a dll, that's great, but I would not recommend it 
either.  ;-)

On 25.06.2012, at 18:02, Mikhail Tchernychev wrote:

> C++ is not involved because I write C interface to the DLL.
> I believe plugins normally work like this, and if plugin
> has user interface it should be independent from the loader.
> For instance wxWidgets does.
> 
> It works on both Win and Linux, I compiled and ran examples on both
> platforms.
> 
> The issue is that if library in thread safe, I suppose it to run
> in a separate safely, including start up and shut down.
> 
> Best
> Mikhail
> 
> 
>> Note that dynamically loading/unloading code like this generally does =
>> not work and is not portable, particularly where C++ is involved...
>> 
>> On Jun 24, 2012, at 12:35 PM, Mikhail Tchernychev =
>> <[email protected]> wrote:
>> 
>>> Hello Everyone,
>>> =20
>>> First of all many thanks for making this nice toolkit available to us!
>>> =20
>>> I have a suggestion about improvement I see could be useful. The
>>> scenario is the following:
>>> =20
>>> 1. =46rom another win32 application, DLL is loaded using LoadLibrary()
>>> 2. Library starts new thread and call FLTK program from this thread.
>>>  It does work fine.
>>> 3. After job is done, library is unloaded from the program space
>>>  using FreeLibrary().
>>> =20
>>> The procedure (1-3) also works under Linux using dlsym().
>>> In fact in both cases I use pthreads :))
>>> =20
>>> The problem is that under Win32 FLTK window class is not unregistered =
>> therefore (1-3) works only once; if DLL is loaded again, FLTK tries to =
>> register class again and CreateWindowEx() function from Fl_win32.cxx =
>> fails.
>>> =20
>>> I found a work around by obtaining FLTK class name in UTF16 as the =
>> following:
>>> =20
>>> =20
>>> wchar_t class_namew[100];
>>> =20
>>> =20
>>> char class_name[100];
>>> strcpy(class_name, "FLTK");
>>> =20
>>> // convert UTF-8 class_name to wchar_t for RegisterClassExW and =
>> CreateWindowExW
>>> =20
>>> fl_utf8toUtf16(class_name,strlen(class_name),               // in
>>>              (unsigned short*)class_namew,          // out
>>>              sizeof(class_namew)/sizeof(wchar_t));
>>> =20
>>> =20
>>> Now in DllMain wheh DLL is unloaded I call
>>> =20
>>>     case DLL_PROCESS_DETACH:
>>>          HINSTANCE hInst =3D GetModuleHandle(NULL);
>>>          BOOL ret =3D UnregisterClass(class_namew,  hInst);
>>> =20
>>> After these fixes DLL can be loaded and FLTK code used multiple
>>> times.
>>> =20
>>> I would suggest to add something to Fl class to allow user to
>>> unregister class under Win32 on demand, or have access to class ATOM =
>> This would help if class name in future versions would change.
>>> =20
>>> Just a suggestion,
>>> =20
>>> Best Regards,
>>> =20
>>> Mikhail
>>> =20
>>> =20
>>> =20
>>> =20
>>> _______________________________________________
>>> fltk-dev mailing list
>>> [email protected]
>>> http://lists.easysw.com/mailman/listinfo/fltk-dev
>> 
>> _____________
>> Michael Sweet
>> 
> 
> _______________________________________________
> fltk-dev mailing list
> [email protected]
> http://lists.easysw.com/mailman/listinfo/fltk-dev

_______________________________________________
fltk-dev mailing list
[email protected]
http://lists.easysw.com/mailman/listinfo/fltk-dev

Reply via email to