TTS Synthesis: D and vibe.d in Action

Chris via Digitalmars-d-announce digitalmars-d-announce at puremagic.com
Thu Apr 14 03:57:37 PDT 2016


On Wednesday, 13 April 2016 at 19:09:46 UTC, Andre Polykanine 
wrote:
> Hello Chris,
>
> CvDda> Just to inform you that we successfully use D and vibe.d 
> for two CvDda> things:
>
> This is just overwhelming!
> How do you make bindings to NVDA API which is in Python?
> I'm  not  an  NVDA  user (I'm using JAWS, if it matters), but 
> I'm still
> very interested in the technology.
>
>
> Andre.

Hi Andre,

What is CvDda>? There are loads of different results in my search 
engine.

To answer your question: in Python you can load DLLs via Python's 
ctypes. You just load the DLL via `CDLL()` or 
`cdll.LoadLibrary()`. It's relatively easy to make a Windows DLL 
in D. To make it accessible for Python's C-types, just expose 
your functions like so

extern (C) {
  export void myFunction(){}
}

Of course, any arguments (at least on Windows) or return types 
should be C-style, i.e. `const char*` instead of `string`. To 
Python it all looks like C, it doesn't know about D. I've seen a 
plug-in written in Scheme and it is also loaded via Python's 
`CDLL()`.

To bind a Python function to your DLL just do something like this 
(assuming you're in a class):

// Load
self.myDLL = CDLL("path/to/dll")

If your function is void, just call it using

// call void function in DLL
self.myDLL.myFunciton();

If it returns something, you should first define the return value:

// assign return type to function in Python
self.myDLL.getError.restype = c_char_p

To pass arguments, it's best to convert Python to C-types like so:

// pass argument as C-type
self.myDLL.myFunction(c_char_p("text"))

It's all in the Python docs at 
https://docs.python.org/2/library/ctypes.html.



More information about the Digitalmars-d-announce mailing list