美文网首页
1.2python调用C语言程序之调用dll动态库---基本数据

1.2python调用C语言程序之调用dll动态库---基本数据

作者: 张一根 | 来源:发表于2018-12-02 17:43 被阅读0次

返回总目录

目录:

1.为什么需要数据类型的转换?

2.C与python数据类型转换的原理:

3.python调用不同C数据类型的实例:

(一)为什么需要数据类型的转换?

对于不同编程语言,他们的数据类型不一样,占用内存的情况也不一样,在Python调用C语言的过程中,其数据类型的占用内存就是不一样的,对于C语言的函数来说,传输的实参与形参的数据类型不一样,就有可能造成计算错误,所以数据类型的转换是为了解决不同语言的数据占用内存的不同。

(二)C与python数据类型转换的原理:

image.png

对应表如下:

image.png

(三)python调用不同C数据类型的实例:

(1).c原文件:(double类型的加法)

// 求和
__declspec(dllexport)
double add_c(double x, double y)
{
    return x + y;
}

(2)没有数据转换的.py文件 python调用:

# 导入ctypes模块
import ctypes
from ctypes import *

# 引用Demo_dll.dll文件, ./表示当前目录
adder = CDLL("./Cmath.dll")
result = adder.add_c(3.15, 4.5)
print(result)

没有运作成功:报错如下
Traceback (most recent call last):
File "D:/00 Desktop/Desktop/python调用C语言程序/test1.py", line 7, in <module>
result = adder.add_c(3.15, 4.5)
ctypes.ArgumentError: argument 1: <class 'TypeError'>: Don't know how to convert parameter 1

(3)转换数据后的调用 .py文件:

# 导入ctypes模块
import ctypes
from ctypes import *

# 引用Demo_dll.dll文件, ./表示当前目录
adder = CDLL("./Cmath.dll")

# 使python的数据类型对应C语言的数据类型,才能正确传值
"""
    把python中的float类型的数据-->C语言中的double类型
"""
a = c_double(3.15)
b = c_double(4.5)

#  设置C语言函数的函数的返回值得类型,用函数.restype = ctype的数据类型
"""
    把C语言中的add_c函数的返回值对应C_double
"""
adder.add_c.restype = c_double

result = adder.add_c(a, b)
print(result)

调用成功,结果如下:
7.65

本小节结束!

返回总目录

相关文章

网友评论

      本文标题:1.2python调用C语言程序之调用dll动态库---基本数据

      本文链接:https://www.haomeiwen.com/subject/sdajcqtx.html