VS2008创建DLL工程

一、DLL的创建

创建项目->Win32->Win32项目,名称:MyDLL->选择DLL

1、新建头文件testdll.h

testdll.h代码如下:

#ifndef TestDll_H_
#define TestDll_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

2、新建源文件testdll.cpp

testdll.cpp代码如下:

#include "stdafx.h"
#include "testdll.h"
#include 
using namespace std;

int Add(int plus1, int plus2)
{
 int add_result plus1 plus2;
 return add_result;
}

3、新建模块定义文件mydll.def

mydll.def代码如下:

LIBRARY "MyDLL"
EXPORTS
 Add @1

4、vs2008自动创建dllmain.cpp文件,它 定义了DLL 应用程序的入口点。

dllmain.cpp代码如下:

// dllmain.cpp 定义 DLL 应用程序的入口点。
#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;
}

最后,编译生成MyDLL.dll文件和MyDLL.lib文件。

二、DLL的使用(静态链接、隐式链接)

创建项目->Win32控制台应用程序,名称:UseDLL。

将MyDLL.lib文件放在与UseDLL.exe文件的目录下。

创建源文件UseDll.cpp

UseDll.cpp代码如下:

// UseDll.cpp 定义控制台应用程序的入口点。
//
#pragma comment (lib,"MyDLL.lib")
#include "stdafx.h"
#include 
using namespace std;

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

int _tmain(int argc, _TCHAR* argv[])
{
 int 20;
 int 30;
 cout<<"a+b="<<Add(a, b)<<endl;
 getchar();
 return 0;
}

运行结果如下:

a+b=50

三、DLL的使用(动态调用、显式链接)

创建项目->Win32控制台应用程序,名称:UseDLL。

将MyDLL.dll文件放在与UseDLL.exe文件的目录下。

创建源文件UseDll.cpp

UseDll.cpp代码如下:

// UseDll.cpp 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include 
#include 
using namespace std;

typedef int (*AddFunc)(int a,int b);

int _tmain(int argc, _TCHAR* argv[])
{
 HINSTANCE hInstLibrary LoadLibrary(_T("MyDLL.dll"));//注意此处必须有_T()函数。

 if (hInstLibrary == NULL)    
    
  FreeLibrary(hInstLibrary); 
  cout<<"LoadLibrary error!"<<endl;
  getchar();
  return 0;
 

 AddFunc _AddFunc (AddFunc)GetProcAddress(hInstLibrary, "Add");
 if (_AddFunc == NULL)
      
  FreeLibrary(hInstLibrary); 
  cout<<"GetProcAddress error!"<<endl;
  getchar();
  return 0;
 }

 cout <<"a+b="<<_AddFunc(20, 30) << endl;    

 getchar();
 FreeLibrary(hInstLibrary);
 return 0;
}

转自http://hi.baidu.com/louisejackie/item/49871a2904af4cfa50fd87cb

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值