利用C语言创建和使用DLL文件
来源:互联网 发布:java pop3 编辑:程序博客网 时间:2024/06/05 02:08
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文件
- 利用C语言创建和使用DLL文件
- 利用C语言创建和使用DLL文件
- 利用C语言创建和使用DLL文件
- 关于c语言创建dll文件及dll文件的调用和一点设想
- VS2012下创建和使用DLL (C++)
- 使用VS2015创建和调用dll文件
- 利用C语言创建、删除目录,批量创建文件
- 解析dll文件和 lib文件的区别(如何利用VC创建DLL文件)
- 解析dll文件和lib文件的区别(如何利用VC创建DLL文件)
- 解析dll文件和 lib文件的区别(如何利用VC创建DLL文件)
- 利用C#创建DLL和调用DLL
- C语言利用Windows api创建文件打开对话框模板
- 从空dll工程中创建dll文件和使用dll文件
- 创建和使用DLL
- 创建和使用DLL
- c语言创建dll,c语言调用dll
- C语言生成DLL文件
- django获取url参数总结
- android 闪屏页—>ViewPager引导页—>主页面
- HDOJ 1397 Goldbach's Conjecture(快速筛选素数法)
- LeetCode 287. Find the Duplicate Number
- Java面向对象
- 利用C语言创建和使用DLL文件
- python 记录
- linux下.run文件的安装与卸载
- Speech Technology 复习(1)
- android declare-styleable的使用
- 网页布局
- shopNC结构介绍及Controller(图)
- IOS简单笔记
- Android获取NavigationView header中的控件