目前做个C项目,从原先预想的Solaris平台跑到 Windows 2003 平台,IDE又从VS 6.0 -> VS 2008, 但客户又要求使用 VS 2005. 管他呢,先用 VS 2008 开发着吧。
客户原有系统有些共通的库,有 *.h, *.lib, *.dll。可是一直就没写过DLL,而且还是C项目。怎么用C创建一个DLL,再用另外一个C项目引入DLL呢?先找找资料,做个Sample吧。
参考:
(v=VS.80).aspx
http://blog.csdn.net/Ocean2006/archive/2009/12/21/5051126.aspx
http://blog.chinaunix.net/u/19962/showart_299092.html
PS:DLL类型有多种,使用的方法也有多种。以下的例子使用的是 静态加载DLL的 方式
(即通过 *.lib(仅有符号链接,不含运行代码) 来编译,运行时加载DLL的)。
|
文件: | VS2008_C_DLL.zip |
大小: | 271KB |
下载: | 下载 |
|
创建DLL (工程名称: SampleDll)1. 创建工程:New -> Visual C++ -> Win32 -> Win32 console application,
输入名称 “SampleDll” -> 确认 -> 弹出窗口中 Next -> Application 种类选择 DLL,
并选中 “Empty project” -> 确认
2. 编写SourcemyFunctions.h
#ifndef _MYFUNCTIONS_H
#define _MYFUNCTIONS_H
#ifdef __cplusplus
extern "C" {
#endif
// In DLL project, Visual Studio will define macro ${PROJECT_NAME}_EXPORTS
// we can use this marco to EXPORT variables/functions in DLL project,
// and to IMPORT variables/functions in other projects which using this dll.
#ifdef SAMPLEDLL_EXPORTS
#define DLL_DECLARATION __declspec(dllexport)
#else
#define DLL_DECLARATION __declspec(dllimport)
#endif
DLL_DECLARATION int mySum(int a, int b);
#ifdef __cplusplus
}
#endif
#endif/* _MYFUNCTIONS_H */
|
myFunctions.c
#include "myFunctions.h"
int mySum(int a, int b) {
return a + b;
}
|
3. 设置工程属性工程上右键 -> 属性 -> 构成:全部 -> C/C++ -> 高级 -> 编译语言选择 : C
4. 编译 && 发布 (Release)Builde -> 构成Manager -> 当前工程的构成从Debug改为Release
Builde —> ReBuild
之后会在 ${Solution_HOME}\Release发现
SampleDll.dll
SampleDll.exp
SampleDll.lib
SampleDll.pdb
调用DLL (工程名:UseDll)1. 创建工程同创建DLL工程一致,只是最后一项选择为 Console Application 而不是 DLL
2. 编写SourcemyMain.c
#include <stdio.h>
#include "myFunctions.h"
int main(int argc, char** argv) {
printf("%d\n", mySum(1, 2));
}
|
3. 设置工程属性工程上右键 -> 属性 -> 构成:全部 -> C/C++ -> 全般 -> 追加Include目录 : 追加文件 "myFunctions.h" 所在目录
工程上右键 -> 属性 -> 构成:全部 -> C/C++ -> 高级 -> 编译语言选择 : C
工程上右键 -> 属性 -> 构成:全部 -> Linker -> 全般 -> 追加Link目录 : 追加文件 “SampleDll.lib” 所在目录
工程上右键 -> 属性 -> 构成:全部 -> Linker -> 输入 -> 追加依存文件 : “SampleDll.lib”
将 “SampleDll.dll” 拷贝至 环境变量 %PATH% 下,或当前Solution的Debug目录下
4. 编译 && 运行Shift + F5 : 至此就OK了,能看到命令行里输出个3.
(若没有找到 SampleDll.dll, 则程序会异常中止)
阅读(6931) | 评论(0) | 转发(0) |