推广 热搜: csgo  vue  angelababy  2023  gps  新车  htc  落地  app  p2p 

Python使用ctypes模块调用DLL函数之传递数值、指针与字符串参数

   2023-06-30 网络整理佚名1070
核心提示:DLL函数的调用——函数参数为字符串情况例2:如对于下面的函数,输入输出皆为字符串指针,函数的功能是对于输入pStr1赋值为“StrIn”,对于输出返回一个指向字符串常量“”的指针,其函数C语言的实现代码如下:这次的例子基本涵盖了在中通过模块调用DLL函数时,传递数值、指针、字符串类型参数时的大部分情况。

在语言中,可以使用模块来调用C++语言等其他动态链接库DLL文件中的函数。 在提高软件运行效率的同时,还可以充分利用目前市场上的各种第三方DLL库函数来扩展软件。 功能和应用领域,减少了重复编写代码和重新发明轮子的工作量,这也充分体现了该语言作为胶水语言的独特优势。

这次我将通过具体的例子来谈谈如何使用模块来调用DLL中的库函数。 本文编程系统环境为win7 64位,使用的版本为.7.14。

由于DLL中函数传递的参数类型比较多样,所以这部分计划解释三遍。 这次我们先讲一下传递值、指针字符串参数的情况,然后分两部分讲解结构体、数值数组等的传递。 情况类型。

加载DLL文件

假设已经有一个DLL文件“MyDll.dll”,其函数协议的调用方式为C调用(cdecl),则加载该dll文件的代码如下:

其中,第一行是导入模块,第二行是使用C调用约定加载“MyDll.dll”文件,并将返回值赋给dll变量。 具体使用的功能。

另外,需要注意的是,如果DLL函数的调用约定是标准调用约定()方法,则DLL文件的加载代码改为如下:

dll = ('MyDll.dll')

DLL函数调用——函数参数是数值

例如“MyDll.dll”文件中的add函数,其函数声明如下:

该函数有两个 int 类型的输入参数 x 和 y,并返回两个数字的和。 C语言实现代码如下:

中的调用方法如下:

这个函数应该说是最简单的函数了。 第17行,直接使用第一步加载DLL后返回的名称dll,后面加上函数名来返回其值。

DLL函数的调用——函数参数为指针的情况

上述函数改进为add2,该函数C语言实现代码如下:

此时函数有三个指针参数x、y、z指向int类型,z是x和y的和。

中的调用方法如下:

其中,第20-22行定义了三个int型变量x、y、z,初始值分别为2、3、0。 第23行调用add2函数时,使用byref表示参数是按引用传递的,相当于C语言中传递的指针。 函数运行后,使用z.value查看z的值。

也可以使用以下代码调用它:

上面代码中的第23-24行,在使用add2函数时,首先将该函数赋给一个变量add2,然后分别声明其输入和输出参数,使用的声明是这三个参数是指向int类型的指针变量。

DLL函数调用——函数参数是字符串

例1:下面的函数,返回输入字符串的字节长度,该函数的C语言实现代码如下:

中的调用代码如下:

其中,第33行定义了一个指向char类型的指针变量pStr,并赋予了初始值'',第34行将其传入函数中返回其长度。

也可以使用下面的代码来调用:

函数的输入参数和输出参数分别使用和声明。

示例 2:对于以下函数,输入和输出都是字符串指针。 该函数的作用是将值“StrIn”赋给输入pStr1,并返回一个指向输出的字符串常量“”的指针。 该函数的C语言实现代码如下:

中的调用代码如下:

上面的代码中,输入参数和输出参数也是分开声明的。 对于输入参数 pStr,使用该函数定义一个字符串缓冲区。 对于返回值pChar,在打印结果时,将其转换为类型并获取其值。

完整的测试代码

完整的测试代码如下图所示:

运行结果如下图所示:

总结

这个例子基本涵盖了.NET中通过模块调用DLL函数时传递值、指针、字符串参数的大部分情况。 需要注意的是,在使用映射C语言中的数据类型时,两者必须完全一致。 下面是模块中的数据类型与C语言中的数据类型的对照表:

欢迎添加关注,一起交流。

 
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报
Powered By DESTOON