python 调用dll &参数_python调用dll

本文展示了如何使用Python的ctypes库调用C语言编写的DLL,并详细说明了不同类型参数(如int、float、char、指针等)的传递方式。通过示例代码解释了如何设置返回类型和参数类型,以及处理结构体类型的返回值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python源码

# 调用ctpes 组件

from ctypes import *

if __name__ == '__main__':

# 调用需要调用的dll, dll中的方法都可以使用了

dll= CDLL("DemoDll.dll")

# python中默认类型是int,可以直接调用 returnAddInt方法

print dll.returnAddInt(1,2)

# float类型demo 多参

#设置返回类型

dll.returnAddFloat.restype=c_float

#设置参数类型(多参可以用小括号表示)

dll.returnAddFloat.argtypes=(c_float,c_float)

print dll.returnAddFloat(1.2,2.3)

#float类型demo 单参

dll.returnFloat.restype = c_float

# 单参数需要使用中括号

dll.returnFloat.argtypes = [c_float]

print dll.returnFloat(1.2)

# char类型demo

dll.returnChar.restype = c_char

dll.returnChar.argtypes = [c_char]

print dll.returnChar("x")

# char* 类型demo

dll.returnPoint.restype = c_char_p

dll.returnPoint.argtypes = [c_char_p]

print dll.returnPoint("xyz")

# 结构体类型 demo

# 定义类名

class MyStruct(Structure):

#定义参数名与参数类型

_fields_=[('value',c_int)]

dll.returnMyStruct.restype =MyStruct

dll.returnMyStruct.argtypes = [c_int]

s=dll.returnMyStruct(2)

print s.value

# int* demo

dll.getIntP.restype=c_int

#定义类型为指针类型

dll.getIntP.argtypes=[POINTER(c_int)]

# 建立 int* 实例

a = c_int(1)

c = POINTER(c_int)(a)

print dll.getIntP(c)

c

#include "DemoDll.h"

char returnChar(char a) {

return a;

}

int returnAddInt(int a, int b) {

return a + b;

}

float returnAddFloat(float a, float b) {

return a + b;

}

float returnFloat(float a) {

return a;

}

char* returnPoint(char * s) {

printf("helloWorld");

return s;

}

struct MyStruct

{

int value;

};

struct MyStruct returnMyStruct(int a) {

struct MyStruct m;

m.value = a;

return m;

}

int getIntP(int* i) {

return i;

}

.h

#pragma once

#include

__declspec(dllexport) char returnChar(char a);

__declspec(dllexport) int returnAddInt(int a, int b);

__declspec(dllexport) float returnFloat(float a);

__declspec(dllexport) float returnAddFloat(float a, float b);

__declspec(dllexport) char* returnPoint(char * s);

__declspec(dllexport) struct MyStruct returnMyStruct(int a);

__declspec(dllexport) int getIntP(int* i);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值