Had not Dllimport in D?
First, I really sorry my bad english. I just want to using Ruby dll file(msvcrt-ruby220.dll). In the case of C#, using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; using INT = System.Int32; namespace RubyTest01 { static class Ruby { public const string RubyDll = "msvcrt-ruby18"; [DllImport(RubyDll)] public static extern void ruby_init(); [DllImport(RubyDll)] public static extern INT rb_eval_string_protect(byte[] script, ref INT state); public static INT rb_eval_string_protect(string script, ref INT state) { return rb_eval_string_protect(Encoding.UTF8.GetBytes(script + '\0'), ref state); } } class Program { static void Main(string[] args) { INT state = 0; Ruby.ruby_init(); Ruby.rb_eval_string_protect("open('test.txt', 'w') {| fp| fp.write(\"Hello World!\\n\")}", ref state); } } I guess D had something like it, but i don't know how to do it. Thx!
Re: Had not Dllimport in D?
On Sunday, 6 March 2016 at 14:12:35 UTC, xky wrote: First, I really sorry my bad english. I just want to using Ruby dll file(msvcrt-ruby220.dll). D can import and use functions from a DLL but you are using a C# library, which is probably not going to work. D can only call functions from DLLs with a C or D interface. If you want to make your own shared libraries or use some C DLLs check these links: http://wiki.dlang.org/Win32_DLLs_in_D (native .dll -> windows) https://dlang.org/dll-linux.html (shared object .so -> linux) https://github.com/DerelictOrg/DerelictUtil (library for loading dll functions on multiple platforms)
Re: Had not Dllimport in D?
Okay, since you clearly have not worked in a native language before, lets start from scratch. You want to make some bindings to a shared library called "msvcrt-ruby18". From this I know that it is using the Microsoft Visual C runtime. That means you must build D using this as well. This is done via the -ms32coff switch for 32bit and -m64 for 64bit (which is easier all up). You will need Visual studio with all of the c/c++ stuff installed. Keep in mind you must match the version of Visual C runtime up with the shared libraries one (if you fail enjoy the segfaults!). Lastly you want some bindings. I won't cover that here. But this should help ya out http://dlang.org/spec/interfaceToC.html After this you should be able to pass the shared library directly to dmd when in -ms32coff or -m64 mode and it'll all work.
Re: Had not Dllimport in D?
On Sunday, 6 March 2016 at 14:21:55 UTC, Rikki Cattermole wrote: Okay, since you clearly have not worked in a native language before, lets start from scratch. [...] Sorry for my idiot question. Thanks.
Re: Had not Dllimport in D?
On Sunday, 6 March 2016 at 14:20:34 UTC, WebFreak001 wrote: On Sunday, 6 March 2016 at 14:12:35 UTC, xky wrote: First, I really sorry my bad english. I just want to using Ruby dll file(msvcrt-ruby220.dll). D can import and use functions from a DLL but you are using a C# library, which is probably not going to work. D can only call functions from DLLs with a C or D interface. If you want to make your own shared libraries or use some C DLLs check these links: http://wiki.dlang.org/Win32_DLLs_in_D (native .dll -> windows) https://dlang.org/dll-linux.html (shared object .so -> linux) https://github.com/DerelictOrg/DerelictUtil (library for loading dll functions on multiple platforms) DerelictUtil looks like useful for me. Thank you. :-)
Re: Had not Dllimport in D?
On 07/03/16 4:19 AM, xky wrote: On Sunday, 6 March 2016 at 14:21:55 UTC, Rikki Cattermole wrote: Okay, since you clearly have not worked in a native language before, lets start from scratch. [...] Sorry for my idiot question. Thanks. Not idiot, its just where you are at and that's ok :) Sorry for making you feel like that though.