关于python中ctypes的信息

本文目录一览:

python怎么导入ctypes

1. 加载Windows系统自带的dll文件:

#加载cdecl调用约定的dll

msvcrt =cdll.msvcrt

#加载stdcall调用约定的dll

kernel32 =windll.kernel32

2. 加载自己dll文件,假如为addFuncDll,方式如下:

mydll =CDLL(“addFuncDll.dll”)

或者 mydll = cdll.addFuncDll

如果其中有函数add,计算两个整数的和,则使用方式如下:

result=mydll.add(4,5)

可以多一步指明add函数的参数类型(也可不指明):

mydll.add.argtypes= [c_int,c_int]

3. 结构体在python中定义为Structure的子类如下:

class POINT(Structure):

_fields_ = [(“x”, c_int),

(“y”,c_int)]

_fields中每一项为元组(成员名称,类型)

结构体还可以用于其他的结构体:

class RECT(Structure):

_fields_ = [(“upperleft”,POINT),

(“lowerright”,POINT)]

python ctypes 问题

我在交互式环境下使用没问题,你查一下环境吧。另外,库名可以不加后缀名,因为linux下可能是so后缀的,加了也没关系。

C:\Users\spython

Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win

32

Type “help”, “copyright”, “credits” or “license” for more information.

from ctypes import *

dir(CDLL)

[‘__class__’, ‘__delattr__’, ‘__dict__’, ‘__doc__’, ‘__format__’, ‘__getattr__’,

‘__getattribute__’, ‘__getitem__’, ‘__hash__’, ‘__init__’, ‘__module__’, ‘__new

__’, ‘__reduce__’, ‘__reduce_ex__’, ‘__repr__’, ‘__setattr__’, ‘__sizeof__’, ‘__

str__’, ‘__subclasshook__’, ‘__weakref__’, ‘_func_flags_’, ‘_func_restype_’]

dll=CDLL(“msvcrt”)

dll

CDLL ‘msvcrt’, handle 75b30000 at 2624570

dll=CDLL(“msvcrt.dll”)

dll

CDLL ‘msvcrt.dll’, handle 75b30000 at 2608ed0

python用ctypes操作剪切板遇到问题!!

这边执行没有问题,版本如下

Python 3.5.0 (v3.5.0:374f501f4567, Sep 13 2015, 02:27:37) [MSC v.1900 64 bit (AMD64)] on win32

代码如下

import ctypes

def get(): 

    ”’从剪切板中获得字符串”’

    h=ctypes.WinDLL(‘user32.dll’)

    h.OpenClipboard(0) 

    aa=h.GetClipboardData(13) 

    ss=ctypes.c_wchar_p(aa) 

    h.CloseClipboard()

    return ss.value

def set(mystr):

    ”’把字符串放到剪切板中,成功返回1,失败返回0”’

    u=ctypes.WinDLL(‘user32.dll’)

    k=ctypes.WinDLL(‘kernel32.dll’)

    s=mystr.encode(‘utf-16’)

    s=s[2:]+b’\0\0′

    ss=ctypes.c_char_p(s)

    u.OpenClipboard(0)

    u.EmptyClipboard()

    k.GlobalAlloc.argtypes=[ctypes.c_uint32,ctypes.c_uint32]

    try:

        cb=k.GlobalAlloc(0,len(s))

        cb=ctypes.c_void_p(cb)

        print(type(cb))

        ctypes.memmove(cb,ss,len(s))

        rr=u.SetClipboardData(13,cb) # 13-unicode

    finally:

        u.CloseClipboard()

    if rr==0:

        return 0

    else:

        return 1

#—–

set(“abcdefg”)

程序返回

class ‘ctypes.c_void_p’

python ctypes 怎么处理函数返回的一般指针

test.c(动态库源代码)

[cpp] view plain copy

// 编译生成动态库: gcc -g -fPIC -shared -o libtest.so test.c

#include stdio.h

#include string.h

#include stdlib.h

typedef struct StructPointerTest

{

char name[20];

int age;

}StructPointerTest, *StructPointer;

StructPointer test() // 返回结构体指针

{

StructPointer p = (StructPointer)malloc(sizeof(StructPointerTest));

strcpy(p-name, “Joe”);

p-age = 20;

return p;

}

编译:gcc -g -fPIC -shared -o libtest.so test.c

call.py(python调用C语言生成的动态库):

[python] view plain copy

#!/bin/env python

# coding=UTF-8

from ctypes import *

#python中结构体定义

class StructPointer(Structure):

_fields_ = [(“name”, c_char * 20), (“age”, c_int)]

if __name__ == “__main__”:

lib = cdll.LoadLibrary(“./libtest.so”)

lib.test.restype = POINTER(StructPointer)

p = lib.test()

print “%s: %d” %(p.contents.name, p.contents.age)

最后运行结果:

[plain] view plain copy

[zcm@c_py #112]$make clean

rm -f *.o libtest.so

[zcm@c_py #113]$make

gcc -g -fPIC -shared -o libtest.so test.c

[zcm@c_py #114]$./call.py

Joe: 20

[zcm@c_py #115]$

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/257438.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-15 12:45
下一篇 2024-12-15 12:45

相关推荐

  • 如何查看Anaconda中Python路径

    对Anaconda中Python路径即conda环境的查看进行详细的阐述。 一、使用命令行查看 1、在Windows系统中,可以使用命令提示符(cmd)或者Anaconda Pro…

    编程 2025-04-29
  • Python计算阳历日期对应周几

    本文介绍如何通过Python计算任意阳历日期对应周几。 一、获取日期 获取日期可以通过Python内置的模块datetime实现,示例代码如下: from datetime imp…

    编程 2025-04-29
  • Python周杰伦代码用法介绍

    本文将从多个方面对Python周杰伦代码进行详细的阐述。 一、代码介绍 from urllib.request import urlopen from bs4 import Bea…

    编程 2025-04-29
  • Python列表中负数的个数

    Python列表是一个有序的集合,可以存储多个不同类型的元素。而负数是指小于0的整数。在Python列表中,我们想要找到负数的个数,可以通过以下几个方面进行实现。 一、使用循环遍历…

    编程 2025-04-29
  • Python中引入上一级目录中函数

    Python中经常需要调用其他文件夹中的模块或函数,其中一个常见的操作是引入上一级目录中的函数。在此,我们将从多个角度详细解释如何在Python中引入上一级目录的函数。 一、加入环…

    编程 2025-04-29
  • 蝴蝶优化算法Python版

    蝴蝶优化算法是一种基于仿生学的优化算法,模仿自然界中的蝴蝶进行搜索。它可以应用于多个领域的优化问题,包括数学优化、工程问题、机器学习等。本文将从多个方面对蝴蝶优化算法Python版…

    编程 2025-04-29
  • Python字典去重复工具

    使用Python语言编写字典去重复工具,可帮助用户快速去重复。 一、字典去重复工具的需求 在使用Python编写程序时,我们经常需要处理数据文件,其中包含了大量的重复数据。为了方便…

    编程 2025-04-29
  • Python程序需要编译才能执行

    Python 被广泛应用于数据分析、人工智能、科学计算等领域,它的灵活性和简单易学的性质使得越来越多的人喜欢使用 Python 进行编程。然而,在 Python 中程序执行的方式不…

    编程 2025-04-29
  • Python清华镜像下载

    Python清华镜像是一个高质量的Python开发资源镜像站,提供了Python及其相关的开发工具、框架和文档的下载服务。本文将从以下几个方面对Python清华镜像下载进行详细的阐…

    编程 2025-04-29
  • python强行终止程序快捷键

    本文将从多个方面对python强行终止程序快捷键进行详细阐述,并提供相应代码示例。 一、Ctrl+C快捷键 Ctrl+C快捷键是在终端中经常用来强行终止运行的程序。当你在终端中运行…

    编程 2025-04-29

发表回复

登录后才能评论