在语言中,可以使用模块来调用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语言中的数据类型的对照表:
欢迎添加关注,一起交流。