VS2008 C++调用DLL 静态链接

一、DLL 生成

  .h文件:
#ifndef DllTest2_H_
#define DllTest2_H_

#ifdef MYLIBDLL
#define MYLIBDLL extern "C" _declspec(dllimport)
#else
#define MYLIBDLL extern "C" _declspec(dllexport)
#endif

MYLIBDLL int Add(int plus1, int plus2);

// you can also write like this:
// extern "C"{
// _declspec(dllexport) int Add(int plus1, int plus2)   
//}

#endif
 .cpp文件
// dllmain.cpp : Defines the entry point for the DLL application.
#include "stdafx.h"

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}

.def文件
LIBRARY    "DllTest2"
EXPORTS
Add @1


二、静态链接 图形方式



1.拷贝dll和lib到exe文件夹中

2.拷贝.h文件夹到项目中
3.找到.h文件夹的路径 (项 目--属性--c/c++--常规)
vs2008 <wbr>c++中DLL调用或引入
4.找到lib文件的路径(项目--属性--链接--常规)
vs2008 <wbr>c++中DLL调用或引入
5.找到lib文件(项目--属性--链接--输入)
vs2008 <wbr>c++中DLL调用或引入

7.测试文件:
#include "stdafx.h"
#include <iostream>
#include "DllTest2.h"
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
       int   a = 20;
       int b = 30;
       cout<<"a+b="<<Add(a,b)<<endl;
       cout<<"hello"<<endl;
       return 0;
}
8.结果:
a+b=50
hello

luckystar原创,转载请保留这几个字,谢谢



三、静态链接 代码方式

创建项目->Win32控制台应用程序,名称:UseDLL。
DllTest2.lib文件放在与UseDLL.exe文件的目录下

(如果lib文件不在exe目录下,就要添加附加库目录:项目属性--沛配置属性--链接器--常规--附加库目录)

创建源文件UseDll.cpp
UseDll.cpp代码如下:
// UseDll.cpp : 定义控制台应用程序的入口点。

#pragma comment (lib,"MyDLL.lib")

(可以不要该语句,但要添加依赖项:项目属性--沛配置属性--链接器--输入--附加依赖项)


#include "stdafx.h"
#include <iostream>
using namespace std;


extern "C" _declspec(dllimport) int Add(int plus1, int plus2);

(可以不要该语句,而是使用#include头文件,头文件的内容与DLL中的一致,当头文件不在项目目录下时,要添加目录:

 项目属性--沛配置属性--c/c++--常规--附加包含目录


int _tmain(int argc, _TCHAR* argv[])
{
int a = 20;
int b = 30;
cout<<"a+b="<<Add(a, b)<<endl;
getchar();
return 0;
}
运行结果如下:
a+b=50


总结: 静态链接DLL,需要做两方面的工作:

1、引入DLL

 可以使用语句#pragma comment (lib,"MyDLL.lib")  

 项目属性--沛配置属性--链接器--输入--附加依赖项。 添加MyDLL.lib

 但两者的前提是DLL在exe目录下,如果不在目录下,1)在上面的DLL名字前加上目录信息 如#pragma comment (lib,"../../MyDLL.lib")  ;2)就要指定所在目录:项目属性--沛配置属性--链接器--常规--附加库目录 。通常我们使用第二种

2、 声明函数

我们可以在代码中使用语句 extern "C" _declspec(dllimport) int Add(int plus1, int plus2);

也可以使用头文件.h,他的内容与DLL头文件的内容一致即可。如果我们不写这个头文件,而是直接使用DLL项目中的头文件,1)在include时在头文件前加上路径,2)设置包含目录 项目属性--沛配置属性--c/c++--常规--附加包含目录),我们一般使用第二种




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值