digitalmars.D.learn - DLLs: Cleaning up
- Chris (11/11) Jul 11 2013 I have a DLL written in D I load into a Python application via
- dnewbie (2/14) Jul 11 2013 Ye. Please try compiling your DLL with GDC.
- Chris (9/27) Jul 12 2013 Thanks for the advice, I might try that later. However, I have
- Chris (6/34) Jul 12 2013 Sorry, forgot to mention that I wrote a small test app in Python
- Ellery Newcomer (8/19) Jul 14 2013 hmm. pyd uses the example under 'DLLs with a C Interface' for its
- Chris (11/41) Jul 15 2013 Yes, I think so too, that it has something to do with GC. What
- Ellery Newcomer (3/4) Jul 15 2013 does too. (I'm the maintainer)
- Chris (8/12) Jul 15 2013 Thank you very much (I used an old version of pyd I had found at
- Chris (14/28) Jul 17 2013 Ok, for the record: I've sorted it out now. First of all, the D
- Ellery Newcomer (3/7) Jul 17 2013 celerid should be up to the task.
I have a DLL written in D I load into a Python application via ctypes like so: lib = CDLL("mydll") The DLL loads and can be used no problem. However, once the DLL is discarded of by the program, the program either doesn't react or crashes. I still haven't worked out how to clean up the DLL correctly before it is unloaded / detached (from Python). I guess it's the GC and/or some C stuff I've overlooked. I have tried both approaches described on this page: http://dlang.org/dll.html. Maybe someone of yous once had a similar problem and found a solution. Any hints or suggestions would be appreciated. Thanks.
Jul 11 2013
On Thursday, 11 July 2013 at 12:58:42 UTC, Chris wrote:I have a DLL written in D I load into a Python application via ctypes like so: lib = CDLL("mydll") The DLL loads and can be used no problem. However, once the DLL is discarded of by the program, the program either doesn't react or crashes. I still haven't worked out how to clean up the DLL correctly before it is unloaded / detached (from Python). I guess it's the GC and/or some C stuff I've overlooked. I have tried both approaches described on this page: http://dlang.org/dll.html. Maybe someone of yous once had a similar problem and found a solution. Any hints or suggestions would be appreciated. Thanks.Ye. Please try compiling your DLL with GDC.
Jul 11 2013
On Thursday, 11 July 2013 at 19:37:31 UTC, dnewbie wrote:On Thursday, 11 July 2013 at 12:58:42 UTC, Chris wrote:Thanks for the advice, I might try that later. However, I have noticed that my DLL does not cause any errors nor does it crash the app when switching between my DLL and other third party plugins. There is only one other plugin that crashes the app after my dll was active (otherwise there's no crash). I've tried several solutions now but to no avail. I don't think it's the other plugin's fault, as it works usually fine, but maybe there is a conflict somewhere in the dark realms of memory.I have a DLL written in D I load into a Python application via ctypes like so: lib = CDLL("mydll") The DLL loads and can be used no problem. However, once the DLL is discarded of by the program, the program either doesn't react or crashes. I still haven't worked out how to clean up the DLL correctly before it is unloaded / detached (from Python). I guess it's the GC and/or some C stuff I've overlooked. I have tried both approaches described on this page: http://dlang.org/dll.html. Maybe someone of yous once had a similar problem and found a solution. Any hints or suggestions would be appreciated. Thanks.Ye. Please try compiling your DLL with GDC.
Jul 12 2013
On Friday, 12 July 2013 at 13:15:34 UTC, Chris wrote:On Thursday, 11 July 2013 at 19:37:31 UTC, dnewbie wrote:Sorry, forgot to mention that I wrote a small test app in Python and everything works fine there. I only wonder, if dlls in D intrude on the memory / main thread of the main app somehow. Forgive me my ignorance, I am not a Windows programmer and usually work on Linux/Unix systems.On Thursday, 11 July 2013 at 12:58:42 UTC, Chris wrote:Thanks for the advice, I might try that later. However, I have noticed that my DLL does not cause any errors nor does it crash the app when switching between my DLL and other third party plugins. There is only one other plugin that crashes the app after my dll was active (otherwise there's no crash). I've tried several solutions now but to no avail. I don't think it's the other plugin's fault, as it works usually fine, but maybe there is a conflict somewhere in the dark realms of memory.I have a DLL written in D I load into a Python application via ctypes like so: lib = CDLL("mydll") The DLL loads and can be used no problem. However, once the DLL is discarded of by the program, the program either doesn't react or crashes. I still haven't worked out how to clean up the DLL correctly before it is unloaded / detached (from Python). I guess it's the GC and/or some C stuff I've overlooked. I have tried both approaches described on this page: http://dlang.org/dll.html. Maybe someone of yous once had a similar problem and found a solution. Any hints or suggestions would be appreciated. Thanks.Ye. Please try compiling your DLL with GDC.
Jul 12 2013
On 07/11/2013 05:58 AM, Chris wrote:I have a DLL written in D I load into a Python application via ctypes like so: lib = CDLL("mydll") The DLL loads and can be used no problem. However, once the DLL is discarded of by the program, the program either doesn't react or crashes. I still haven't worked out how to clean up the DLL correctly before it is unloaded / detached (from Python). I guess it's the GC and/or some C stuff I've overlooked. I have tried both approaches described on this page: http://dlang.org/dll.html. Maybe someone of yous once had a similar problem and found a solution. Any hints or suggestions would be appreciated. Thanks.hmm. pyd uses the example under 'DLLs with a C Interface' for its windows dll code and it seems pretty stable, but then it doesn't use ctypes. It doesn't look like you need to be mucking with rt_init and rt_term, so maybe the garbage collector is trying to collect something that python still has a reference to? Also, if you can finagle a dll out of gdc I would love to hear about it. I have not used it on windows, though.
Jul 14 2013
On Sunday, 14 July 2013 at 21:10:53 UTC, Ellery Newcomer wrote:On 07/11/2013 05:58 AM, Chris wrote:Yes, I think so too, that it has something to do with GC. What happens in the program is that Python passes a string to the DLL but nothing is returned. The DLL somehow interferes with the main thread. Other DLLs/threads are fine. I'll check again. Thanks for the info about Pyd, unfortunately it is out of date and doesn't work with newer versions of dmd, but I'll have a look at the source code anyway. "Finagle" is the right word. Phew. But first I could try and write a C wrapper (with rt_init etc), I did that once and it worked.I have a DLL written in D I load into a Python application via ctypes like so: lib = CDLL("mydll") The DLL loads and can be used no problem. However, once the DLL is discarded of by the program, the program either doesn't react or crashes. I still haven't worked out how to clean up the DLL correctly before it is unloaded / detached (from Python). I guess it's the GC and/or some C stuff I've overlooked. I have tried both approaches described on this page: http://dlang.org/dll.html. Maybe someone of yous once had a similar problem and found a solution. Any hints or suggestions would be appreciated. Thanks.hmm. pyd uses the example under 'DLLs with a C Interface' for its windows dll code and it seems pretty stable, but then it doesn't use ctypes. It doesn't look like you need to be mucking with rt_init and rt_term, so maybe the garbage collector is trying to collect something that python still has a reference to? Also, if you can finagle a dll out of gdc I would love to hear about it. I have not used it on windows, though.
Jul 15 2013
On 07/15/2013 07:18 AM, Chris wrote:doesn't work with newer versions of dmddoes too. (I'm the maintainer) https://bitbucket.org/ariovistus/pyd
Jul 15 2013
On Monday, 15 July 2013 at 15:26:49 UTC, Ellery Newcomer wrote:On 07/15/2013 07:18 AM, Chris wrote:Thank you very much (I used an old version of pyd I had found at http://pyd.dsource.org/), which gave me loads of warnings from the latest dmd compiler. But I have installed the latest version now and the obligatory "hello world" program works! I'll try to build my dll with pyd and will let you know what happened. I hope it can cope with the third party libraries my dll uses ... We'll see. Thanks again.doesn't work with newer versions of dmddoes too. (I'm the maintainer) https://bitbucket.org/ariovistus/pyd
Jul 15 2013
On Monday, 15 July 2013 at 15:59:42 UTC, Chris wrote:On Monday, 15 July 2013 at 15:26:49 UTC, Ellery Newcomer wrote:Ok, for the record: I've sorted it out now. First of all, the D code was INNOCENT! The whole thing was down to how paths and search paths are handled in Python, with some nasty surprises as regards obtaining (valid) paths on Windows as opposed to Linux / Mac. The D DLL works fine and doesn't interfere with the program's memory. No need to use GDC. A normal DMD compilation is enough (I used 2.063) However, I will try to set up a Pyd implementation as well, which would avoid using ctypes and make the code more concise. (Any time and life saving advice about linking to other libraries / DLLs?) Thanks everyone!On 07/15/2013 07:18 AM, Chris wrote:Thank you very much (I used an old version of pyd I had found at http://pyd.dsource.org/), which gave me loads of warnings from the latest dmd compiler. But I have installed the latest version now and the obligatory "hello world" program works! I'll try to build my dll with pyd and will let you know what happened. I hope it can cope with the third party libraries my dll uses ... We'll see. Thanks again.doesn't work with newer versions of dmddoes too. (I'm the maintainer) https://bitbucket.org/ariovistus/pyd
Jul 17 2013
On 07/17/2013 08:13 AM, Chris wrote:with some nasty surprises as regards obtaining (valid) paths on Windows as opposed to Linux / Mac.Do tell.(Any time and life saving advice about linking to other libraries / DLLs?) Thanks everyone!celerid should be up to the task.
Jul 17 2013