9

私は、C プログラムにリンクできる DLL を提供するサードパーティ製品のターミナル エミュレータを持っています。

問題が見つかったときに実行可能ファイルをコンパイルして顧客に送信する必要がないように、スクリプト言語 (Python には慣れていますが、Perl にはやや慣れていません) から実行したいと考えています。

We also want the customers to be able to write their own scripts using ours as baselines and they won't entertain the idea of writing and compiling C code.

What's a good way of getting Python/Perl to interface to a Windows DLL. My first thought was to write a server program and have a Python script communicate with it via TCP but there's got to be an easier solution.

4

5 に答える 5

15

Python から C ライブラリを呼び出す 1 つの方法は、ctypesを使用することです。

>>> from ctypes import *
>>> windll.user32.MessageBoxA(None, "Hello world", "ctypes", 0);
于 2008-10-27T03:57:11.843 に答える
12

Perl では、Win32::APIを使用して DLL に簡単に接続できます。コンパイラと Windows ヘッダーにアクセスできる場合は、Inline::Cもあります。

Perl XSUBは、Perl と C の間のインターフェースも作成できます。

于 2008-10-27T03:58:05.493 に答える
5

Perl では、少なくとも場合によっては、 P5NCIもそれを行います。しかし、dll とのインターフェイスを直接管理するために使用するものはすべてユーザーフレンドリーではないように思われます。ユーザー (スクリプト作成者?) フレンドリーなラッパーを使用する場合は、XS モジュールを使用することもできます。

「実行可能ファイルをコンパイルして送信する」と「スクリプトをコンパイルして送信する」の間に意味のある違いはないと思います。

于 2008-10-27T04:13:34.103 に答える
4

Pythonの場合、DLLにリンクする拡張機能をコンパイルできるため、Pythonでは通常のモジュールのようにインポートできます。これは、Boost.Pythonなどのライブラリを使用するか、SWIG(Perlやその他のスクリプト言語もサポート)などのツールを使用してラッパーを自動的に生成することにより、手動で行うことができます。

于 2008-10-27T04:46:03.320 に答える
3

Python Py_InitModule API 関数を使用すると、Python から呼び出すことができる c/c++ 関数からモジュールを作成できます。

これを達成するには、約 10 行ほどの C/C++ コードが必要ですが、書くのは非常に簡単なコードです。

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

私が作成したZeusエディタは、このアプローチを使用してZeusマクロを Python で記述できるようにしており、非常にうまく機能します。

于 2008-10-27T22:56:18.330 に答える