您的位置:首页 > 其它

使用vs2008制作dll文件,生成动态链接库

2012-08-13 23:28 417 查看
1.制作dll文件

vs2008中,File > New Project > Other Language > Win32 > Win32 Console Application. 输入项目名称:MyDll。点击【OK】,【Next】,选择dll单选按钮,完成。

vs2008会自动生成一些代码,不用管它。创建MyDll.h,代码如下

MyDll.h 为了提高可用性,写了可回带值的函数供参考

Cpp代码 收藏代码

//MyDLL.h

extern "C" _declspec(dllexport) int Max(int a, int b);

extern "C" _declspec(dllexport) int Min(int a, int b);

extern "C" _declspec(dllexport) bool cim2scada(char* cimId, char** scadaId);

创建MyDll.cpp

Cpp代码 收藏代码

// MyDll.cpp : Defines the exported functions for the DLL application.

//

#include "stdafx.h"

#include"MyDll.h"

#include <iostream>

int Max(int a, int b)

{

if(a>=b)return a;

else

return b;

}

int Min(int a, int b)

{

if(a>=b)return b;

else

return a;

}

bool cim2scada(char* cimId, char** scadaId){

char *result;

if(cimId == NULL){

printf("空指针!");

return false;

}else if(strlen(cimId) == 0){

printf("cimId无值!");

return false;

}

if(strcmp(cimId, "aaaaaa") == 0){

result = "1000";

}else if(strcmp(cimId, "bbbbbb") == 0){

result = "2000";

}

*scadaId = result;

printf("fun scadaId:%s\n", *scadaId);

return true;

}

编译一下,到工程的DEBUG目录,就可以找到MyDll.dll文件

2.创建测试程序 --- 动态加载DLL

vs2008中,File > New Project > Other Language > Win32 > Win32 Console Application. 输入项目名称:DllTest。点击【OK】,【Next】,选择console单选按钮,去掉“预编译头”默认勾选项,完成。

Cpp代码 收藏代码

#include "windows.h"

#include <iostream>

void main(){

typedef int(*pMax)(int a, int b); //定义个函数指针pMax指针指向int XX(int a, int b)这样一个类型的函数

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

typedef bool(*pcim2scada)(char* cimid, char** scada);

HINSTANCE HDLL;

HDLL=LoadLibrary(L"MyDll.dll");//加载动态链接库MyDll.dll文件;

pMax Max=(pMax)GetProcAddress(HDLL,"Max");

pMin Min=(pMin)GetProcAddress(HDLL,"Min");

pcim2scada cim2scada=(pcim2scada)GetProcAddress(HDLL,"cim2scada");

int a = Max(5, 12);

char cimId[] = "aaaaaa";

char * scadaId = "";

bool b = cim2scada(cimId, &scadaId);

printf("Max结果为%d",a);

printf("cimId:%s, scadaId:%s", cimId, scadaId);

FreeLibrary(HDLL);//卸载MyDll.dll文件;

}

编译一下

拷贝MyDll.dll文件到DllTest项目的Debug目录下

打开一个控制台(cmd),进入DllTest > Debug目录,运行DllTest.exe

输出结果:

Cpp代码 收藏代码

fun scadaId : 1000

Max结果为12

cimId:aaaaaa, scadaId:1000

=====================================================================================================

这里总结一下vs2008下创建dll并使用dll导出函数的方法,当然方法还有很多,找出一个自己比较习惯的方法就好!

一:生成DLL

1:创建DLL工程

文件->新建->项目->visual c++->win32->win32控制台应用程序(win32项目也可以)

填写项目名称MyDLL->确定->下一步->DLL(附加选项 对空项目打钩)->完成。

到这里DLL工程就创建完毕了,下面新建两个文件MyDLL.cpp和MyDLL.h。

MyDLL.cpp内容如下:

#include <iostream>

using namespace std;

#include "MyDLL.h"

int Add(int &a,int &b)

{

return a+b;

}

MyDLL.h内容如下:

#pragma once

#define DLL_EXPORT __declspec(dllexport)

extern "C" DLL_EXPORT int Add(int &a,int &b);

点击生成,则dll文件就生成了,vs2008不能直接生成lib文件,这个时候就需要我们在建立dll工程的时候 再新建一个def文件,默认生成然后重新生成就能够得到lib文件了

2:调用DLL文件导出的接口函数 ----静态加载DLL

vs2008这个IDE非常好用,我们这里玩一下,在上面创建的DLL工程中,再新建一个项目来直接调用DLL导出函数。

右键解决方案->添加->新建项目->建立一个空的常规工程 testMyDLL,下面新建两个文件testMyDLL.cpp和testMyDLL.h

testMyDLL.cpp内容如下:

//静态加载DLL需要把生成DLL的时候产生的LIB文件跟DLL文件还有头文件一起放在需要调用的工程中,这样就可以直接使用DLL中的函数。

#include "testMyDLL.h"

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

#include <iostream>

using namespace std;

int main()

{

int a =3;

int b =2;

cout<<Add(a,b)<<endl;

getchar();

}

testMyDLL.h内容如下:

#pragma once

#define DLL_EXPORT __declspec(dllexport)

extern "C" DLL_EXPORT int Add(int &a,int &b);

这里需要注意testMyDLL.cpp文件中调用lib的这句话:

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

这里需要指明lib所在的文件夹,当然我们也可以在生成dll的MyDLL工程中,指定lib和dll文件的输出路径,直接到testMyDLL工程下。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: