利用C语言创建和使用DLL文件

 
C语言复用代码有很多的形式,利用动态链接库(DLL)来复用代码也是一种很有效的做法。使用DLL相比利用静态库来复用代码有几点不同:
 

a. 可以不用写 header File,但是在编译过程中需要在编译器里把文件链接起来;
 
b. 更加灵活,可以只改动和编译DLL文件的内容,而不用对程序其他部分进行修改;
 

c. 利用DLL文件可以方便地与其他语言进行链接(比如Python)。

 

目前看来,创建 DLL 文件和创建普通c语言文件没有什么不同。创建 C++ 的 DLL 文件要更复杂一些,C 则相对简单。

照着 C 代码的格式写一个文件(注:C++ 似乎会不同,微软就有教程,可以查阅VS的帮助文档)。

 

1)创建DLL及C语言调用程序

以下是一个实例:

创建DLL文件名,为 TestDll.c

 

//TestDll.c 


#include <</font>stdio.h>


int hello()
{
    printf ("Hello from DLL\n");
}


int SumNumbers(int a, int b)
{
    int c;
    c=a+b;
    return c;
}

 

写一个主程序来调用DLL文件名为 UseTestDll.c

 

//UseTestDLL.c 


#include <</font>stdio.h>


int main()
{
    hello();
    hello();
    int a=2,b=3;
    int c;
    c=SumNumbers(a, b);
    printf ("c= %d.\n",c);
}

=====================================

2)编译及运行

a. 编译 DLL 文

先将 c 文件编译成 o 文件,然后再讲 o 文件编译成为 DLL 文件,在 cmd 里面代码如下

gcc -c TestDLL.c

gcc -shared -o TestDll.dll TestDll.o

这样就得到了 TestDll.dll 文件,如果文件多的话可以写个Batch文件来搞定。

b. 编译使用文件

gcc -o UseTestDll UseTestDll.c -L./ -lTestDll

这样就得到了 UseTestDll.exe 文件。UseTestDll.exe 和 TestDll.dll 形成了程序的两个部分,缺一不可。

 

==================================================

3)在Python中使用已有的Dll文件

DLL文件一样可以在Python中使用。我们可以利用python自带的ctypes模块。

下面是一个示例文件,文件名为UseCDll.py

from ctypes import *

# Simple Test on c_int object
i=c_int(5)
print i
print i.value
i.value=10
print i.value


# Import Dll
TestDll=CDLL('TestDll.dll')


# Test Print Function
TestDll.hello()


# Test variable dilivery
a=c_int(4)
b=c_int(6)
c=TestDll.SumNumbers(a,b)
print c

 

函数说明:
c_int() 在python下创建c的int类型对象,因为python的数据类型和c的数据类型需要转换
CDLL() 读入DLL文件,并将其转化为一个对象,利用 对象.函数 的形式调用DLL里面的函数
运行一下:

 

 

利用C语言创建和使用DLL文件

 

成功实现了在Python下使用DLL文件,这种方法可以减少代码重复开发,同时由于C的速度比Python大很多,还可以用这个方法对Python进行加速。

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值