您的位置:首页 > 其它

VS2008创建和使用dll

2012-03-03 14:13 429 查看
一、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 <iostream>

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

如果有多个函数的话就继续在后在添加

fun2 @2

fun3@ 3

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 <iostream>

using namespace std;

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

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的使用(动态调用、显式链接)

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

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

创建源文件UseDll.cpp

UseDll.cpp代码如下:

// UseDll.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"

#include <iostream>

#include <windows.h>

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: