How can I call a DLL from a scripting language?

后端 未结 5 1976
离开以前
离开以前 2020-12-31 15:37

I have a third-party product, a terminal emulator, which provides a DLL that can be linked to a C program to basically automate the driving of this product (send keystrokes,

相关标签:
5条回答
  • 2020-12-31 16:19

    The Python Py_InitModule API function allows you to create a module from c/c++ functions which can then be call from Python.

    It takes about a dozen or so lines of c/c++ code to achieve but it is pretty easy code to write:

    https://python.readthedocs.org/en/v2.7.2/extending/extending.html#the-module-s-method-table-and-initialization-function

    The Zeus editor that I wrote, uses this appoach to allow Zeus macros to be written in Python and it works very well.

    0 讨论(0)
  • 2020-12-31 16:35

    In Perl, P5NCI will also do that, at least in some cases. But it seems to me that anything you use that directly manages interfacing with the dll is going to be user-unfriendly, and if you are going to have a user (scriptor?) friendly wrapper, it might as well be an XS module.

    I guess I don't see a meaningful distinction between "compile and send out executables" and "compile and send out scripts".

    0 讨论(0)
  • 2020-12-31 16:38

    In Perl, Win32::API is an easy way to some interfacing to DLLs. There is also Inline::C, if you have access to a compiler and the windows headers.

    Perl XSUBs can also create an interface between Perl and C.

    0 讨论(0)
  • 2020-12-31 16:40

    One way to call C libraries from Python is to use ctypes:

    >>> from ctypes import *
    >>> windll.user32.MessageBoxA(None, "Hello world", "ctypes", 0);
    
    0 讨论(0)
  • 2020-12-31 16:44

    For Python, you could compile an extension which links to the DLL, so that in Python you could just import it like a normal module. You could do this by hand, by using a library like Boost.Python, or by using a tool such as SWIG (which also supports Perl and other scripting languages) to generate a wrapper automatically.

    0 讨论(0)
提交回复
热议问题