C语言动态链接库DLL的调用
- 浏览:5856
- |
- 更新:
我只会C,用的是“老得掉牙”的VC++6.0,想实现最简单的dll的调用。一通百度之后终有所悟。好结果&好心情当分而享之!本着“简洁美”原则,传达下本篇摘要:
.c->cl编译器->.obj->link链接器->.dll。在另一程序中调用该dll实现a+b
方法/步骤
新建DLLTest文件夹,在该文件夹中新建source文件夹
在source文件夹中造add.c( 注意.cpp不行 )关门放代码:
_declspec(dllexport)int add(int a,int b){ return a + b;}
保存
win+R+cmd请出总指挥“命令行”,输入(小心空格)
cl /c E:\VCfile\DLLTest\source\add.c /FoE:\VCfile\DLLTest\source\add.obj开始挥舞编译器大棒。挥舞原则:
/c:只编译
E……add.c:C文件的老巢(替换成你的add.c路径)
/Fo:造出个obj
E……add.obj:obj放这儿(随机应变部分)
看见没?.obj已经诞生了
【如果找不到cl编译器,只需3步:一步,环境变量->系统变量->path中添加cl.exe路径,分好与前面分开(一般是:鬼晓得你把VC6安装在哪儿\VC6.0\Microsoft Visual Studio\VC98\Bin);二步, 新建 个名为INCLUDE的系统变量,值为:你的VC6安装位置\VC6.0\Microsoft Visual Studio\VC98\Include,三步:和二步类似, 新建 LIB变量,值为你的VC6安装位置\VC6.0\Microsoft Visual Studio\VC98\Lib】
- 相关内容未经许可获取自百度经验
继续输入(路径也要随机应变)
link /DLL /out:E:\VCfile\DLLTest\source\add.dll E:\VCfile\DLLTest\source\add.obj
开始挥舞链接器大棒,和cl类似。两大棒下去,眼睁睁看到add.dll出来(看命令行后面的文件夹中已经出现add.dll)。哈哈
dll的制造就告一段落,下面调用dll。
新建源文件call_dll.c或.cpp放到DLLTest文件夹,同时add.dll也复制过来(看图),在call_dll.c中放入以下代码:
#include <stdio.h>#include <windows.h>
typedef int(* my_fun)(int a,int b);
int main(void){ HINSTANCE dllA; my_fun f1;
dllA = LoadLibrary("add.dll"); if(NULL==dllA) printf("无法加载dll!\n"); f1 = (my_fun)GetProcAddress(dllA,"add"); if(NULL==f1) printf("找不到函数地址!\n");
printf("调用结果:%d\n", f1(2,3));
return 0;}
编译,连接运行出现个5!此刻是属于程序员的你的,加鸡腿!
END














