ホームページ バックエンド開発 Python チュートリアル C 言語で Python 拡張機能を作成する手順

C 言語で Python 拡張機能を作成する手順

Oct 18, 2016 am 10:18 AM

この記事ではC言語でPythonを拡張する方法を紹介します。示されている例は、文字列を Windows クリップボードに設定する関数を Python に追加することです。次のコードを作成するときに使用した環境は、Windows XP、gcc.exe 4.7.2、Python 3.2.3 です。

最初のステップは、C 言語で DLL を記述することです

次の内容を含む Clip.c ファイルを作成します:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

// 设置 UNICODE 库,这样的话才可以正确复制宽字符集

#define UNICODE

   

#include <windows.h>

#include <python.h>

   

// 设置文本到剪切板(Clipboard)

static PyObject *setclip(PyObject *self, PyObject *args)

{

  LPTSTR  lptstrCopy;

  HGLOBAL hglbCopy;

  Py_UNICODE *content;

  int len = 0;

   

  // 将 python 的 UNICODE 字符串及长度传入

  if (!PyArg_ParseTuple(args, "u#", &content, &len))

    return NULL;

   

  Py_INCREF(Py_None);

   

  if (!OpenClipboard(NULL))

    return Py_None;

   

  EmptyClipboard();

   

  hglbCopy = GlobalAlloc(GMEM_MOVEABLE, (len+1) * sizeof(Py_UNICODE));

  if (hglbCopy == NULL) {

    CloseClipboard();

    return Py_None;

  }

   

  lptstrCopy = GlobalLock(hglbCopy);

  memcpy(lptstrCopy, content, len * sizeof(Py_UNICODE));

  lptstrCopy[len] = (Py_UNICODE) 0;

   

  GlobalUnlock(hglbCopy);

   

  SetClipboardData(CF_UNICODETEXT, hglbCopy);

   

  CloseClipboard();

   

  return Py_None;

}

   

// 定义导出给 python 的方法

static PyMethodDef ClipMethods[] = {

  {"setclip", setclip, METH_VARARGS,

   "Set string to clip."},

  {NULL, NULL, 0, NULL}

};

   

// 定义 python 的 model

static struct PyModuleDef clipmodule = {

  PyModuleDef_HEAD_INIT,

  "clip",

  NULL,

  -1,

  ClipMethods

};

   

// 初始化 python model

PyMODINIT_FUNC PyInit_clip(void)

{

  return PyModule_Create(&clipmodule);

}

ログイン後にコピー

2 番目のステップは、Python setup.py を記述することです

次の内容:

1

2

3

4

5

6

7

8

9

from distutils.core import setup, Extension

   

module1 = Extension(&#39;clip&#39;,

                    sources = [&#39;clip.c&#39;])

   

setup (name = &#39;clip&#39;,

       version = &#39;1.0&#39;,

       description = &#39;This is a clip package&#39;,

       ext_modules = [module1])

ログイン後にコピー

第 3 章 Python でコンパイルする 3 つの手順

次のコマンドを実行します:

python setup.py build --compiler=mingw32 install

私の環境では、次のエラーが表示されます:

gcc:エラー: コマンド ライン オプション '-mno-cygwin' が認識されません

エラー: コマンド 'gcc' が終了ステータス 1 で失敗しました

%PYTHON インストール ディレクトリ%/Lib/distutils/cygwinccompiler.py ファイルを開き、-mno-cygwin を削除しますそれを実行してから、再度実行します。


通常の操作の後、clip.pyd ファイルが生成され、%PYTHON インストール ディレクトリ%/Lib/site-packages ディレクトリにコピーされます


4 番目のステップは、拡張機能をテストすることです

A を書き込みますtest.py の内容は次のとおりです。

1

2

3

# -*- encoding: gbk -*-

import clip

clip.setclip("Hello python")

ログイン後にコピー

python test.py

を実行し、それを任意の場所に貼り付けて、それが正しいかどうかを確認します。


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

HTMLを解析するために美しいスープを使用するにはどうすればよいですか? HTMLを解析するために美しいスープを使用するにはどうすればよいですか? Mar 10, 2025 pm 06:54 PM

HTMLを解析するために美しいスープを使用するにはどうすればよいですか?

Pythonを使用してテキストファイルのZIPF配布を見つける方法 Pythonを使用してテキストファイルのZIPF配布を見つける方法 Mar 05, 2025 am 09:58 AM

Pythonを使用してテキストファイルのZIPF配布を見つける方法

Pythonでの画像フィルタリング Pythonでの画像フィルタリング Mar 03, 2025 am 09:44 AM

Pythonでの画像フィルタリング

TensorflowまたはPytorchで深い学習を実行する方法は? TensorflowまたはPytorchで深い学習を実行する方法は? Mar 10, 2025 pm 06:52 PM

TensorflowまたはPytorchで深い学習を実行する方法は?

Pythonの並列および同時プログラミングの紹介 Pythonの並列および同時プログラミングの紹介 Mar 03, 2025 am 10:32 AM

Pythonの並列および同時プログラミングの紹介

Pythonオブジェクトのシリアル化と脱介入:パート1 Pythonオブジェクトのシリアル化と脱介入:パート1 Mar 08, 2025 am 09:39 AM

Pythonオブジェクトのシリアル化と脱介入:パート1

Pythonで独自のデータ構造を実装する方法 Pythonで独自のデータ構造を実装する方法 Mar 03, 2025 am 09:28 AM

Pythonで独自のデータ構造を実装する方法

Pythonの数学モジュール:統計 Pythonの数学モジュール:統計 Mar 09, 2025 am 11:40 AM

Pythonの数学モジュール:統計

See all articles