在网上搜索了一些关于库文件编写和调用的方法。在这里总结一下。
1. 打开Visual C++6.0编译软件,File->New;
2. 在New对话框里选择"Win32 Static Libray";
3. 填写Project name: "Writedll"; ,其中有两个选项,选择第一项,然后"OK"->"Finish"
4. 通过New来添加一个hello.h到当前的Project下,在其中写上要加入到库里的函数声明:
void helloworld( );
5. 通过New来添加一个hello.cpp到当前的Project下,加入如下代码:
#include "hello.h" //库函数在其中声明
#include "iostream.h"
void helloworld( )
{
cout<<"hello world!"<<endl;
return 1;
}
编译通过,在hello文件夹中的Debug子文件夹里生成了hello.lib库文件
6. 建立一个Win32 Console Application, 命名为he;
7. 在he中加入一个C++ Source file,命名为mainapp;
8. 在mainapp中加入一下代码:
#include "hello.h"
int main( )
{
helloworld( );
return ;
}
将hello.h和hello.lib复制到he的文件夹中,并加hello.lib加入到当前Project下(具体为在开发环境中的FileView中加入hello.lib)
附:vs2010中动态链接库的隐式调用:项目---添加引用---浏览--(选择你的DLL文件)---确定
在vc 6下编写和在vs2008以上版本有些区别,在new probject时,找编写选项困难。
一、
2.1在Visual C++ 里面选择Win32,新建一个Win32 Project工程,名称为mydll
2 .2在Application Settings窗口,Application type中选择 DLL; additional options中选择Empty project。点击完成
2 .3 新建mydll.cpp和mydll.h两个文件
2 .4 在mydll.h里面添加代码:
extern “C” __declspec(dllexport) int Min(int a, int b);
2 .5 在mydll.cpp里面添加代码:
#include “mydll.h”
#include <stdio.h>
int Min(int a, int b)
{
printf(“Min is called”);
if (a >= b) return b;
else return a;
}
2 .6 生成dll
2 .7 把生成的 .lib文件拷贝到另一个工程(要调用的DLL项目)的目录下,把.dll文件拷贝到另一个工程(要调用的DLL项目)的debug目录下
2 .8 另一个项目的调用代码如下:
#pragma comment(lib,”MyDll.lib”) //功能:编译器在link时,链接到MyDll.lib文件,也可以在projection->Setting->Link页的Object/Moduls栏填入MyDll.lib既可。
vs2010中:工程:属性-》链接-》输入-》额外依赖项直接输入库的名字就行了。但可能需要包含新的库查找路径:属性-》链接-》通用 -》额外库目录
extern “C”_declspec(dllimport) int Min(int a,int b);
#include <stdio.h>
int main()
{
int a;
a = Min(8,10);
printf(“比较的结果为%d”,a);
return 0;
}
使用 __declspec(dllimport) 从 DLL 导出:http://msdn.microsoft.com/zh-cn/library/a90k134d(v=VS.80).aspx
二、
1 在Visual C++ 里面选择Win32,新建一个Win32 Project工程,名称为mydll
2 在Application Settings窗口,Application type中选择 DLL; additional options中选择Empty project。点击完成
3 新建mydll.cpp和mydll.def两个文件
4 在mydll.def里面添加代码:
LIBRARY mydll
EXPORTS
Max @1
Min @2
5 在mydll.cpp里面添加代码:
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;
}
6 生成dll
7 把生成的 .lib文件拷贝到另一个工程(要调用的DLL项目)的目录下,把.dll文件拷贝到另一个工程(要调用的DLL项目)的debug目录下
8 另一个项目的调用代码如下:
.h
__declspec(dllimport) int Max(int a,int b);
__declspec(dllimport) int Min(int a,int b);
.cpp
#include <stdio.h>
#include “dllcall.h”
int main()
{
int a;
a = Max(8,10);
printf(“比较的结果为%d “,a);
return 0;
}
9..然后配置工程属性
.dll所在的文件夹
使用 DEF 文件从 DLL 导出:http://msdn.microsoft.com/zh-cn/library/d91k01sh(VS.80).aspx
三、
隐式调用就把dll拷到项目文件夹下,把dll相应的头文件加进项目就好了;显式调用是同过LoadLibrary函数加载dll,通过 GetProcAddress得到想调用的函数的地址然后作一个牵制转换后就可以调用了。即:隐式调用(通过lib和头文件)和显式调用(只通过提供的 dll文件)。
http://www.cppblog.com/richardhe/articles/57428.html