Chinaunix首页 | 论坛 | 博客
  • 博客访问: 249059
  • 博文数量: 83
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 410
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-22 10:11
文章分类
文章存档

2016年(2)

2014年(2)

2013年(65)

2012年(14)

我的朋友

分类: C/C++

2013-01-21 10:16:07

   目前做个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. 编写Source
myFunctions.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. 编写Source

myMain.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) |
给主人留下些什么吧!~~