VC++编写DLL导出函数及其调用方法
最后更新于:2022-04-01 20:35:10
DLL (Dynamic Link Library)动态链接库,是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件,其优点主要有:1. 有助于节省内存;2. 有助于资源共享;3. 不需编译的软件系统升级;4. 支持多语言程序。当然,有的时候我们也可以将一些核心的或者不愿意公开提供的函数编写为DLL,从而起到隐藏和保护的作用。
下面结合实例详细说明在Visual Studio 2008 SP1 IDE中如何创建、编写和导出VC++ MFC DLL,以及如何调用生成的DLL。(完整实例可在我的CSDN资源中下载:[http://download.csdn.net/detail/margin1988/8336697](http://download.csdn.net/detail/margin1988/8336697))
(1)打开Visual Studio 2008 SP1 IDE,创建VC++ MFC DLL工程,如图所示:
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-31_57c6b4a8542c7.jpg)
(2)在自动生成的“工程名.cpp”(如:FirstDLL.cpp)文件中,编写要导出的函数(注:在该项目属性中工程字符集选择了“使用多字节字符集”):
~~~
/**函数:int calculateLineNum(CString filePath)
功能:用于计算文本文件的行数
描述:只需要指定文本文件的路径,若找到,则返回其行数,若没找到,则返回0 */
extern "C" _declspec(dllexport) int calculateLineNum(CString filePath){
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CStdioFile file;
CString str;
int lineNum=0;
if (file.Open(_T(filePath),CFile::modeRead | CFile::typeText))
{
file.SeekToBegin();
while (file.ReadString(str))
{
lineNum++;
}
file.Close();
}
return lineNum;
}
~~~
(3)点击“生成解决方案”,生成了供程序调用的DLL文件和Lib文件(该例中只是导出了一个函数,不需要.h文件);
(4)生成DLL及其导出函数的调用方法:
1)将.dll和.lib文件拷贝到你的工程的目录下;
2)在程序中预定义和导入库和函数:
~~~
#pragma comment(lib, "FirstDLL.lib")
extern "C" _declspec(dllimport) int calculateLineNum(CString filePath);
~~~
3)或者,也可以在工程的属性中添加链接:
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-31_57c6b4a880890.jpg)
然后,程序中就只需要这一句:
~~~
extern "C" _declspec(dllimport) int calculateLineNum(CString filePath);
~~~
4)调用DLL中的导出函数:
~~~
CString path="ReadMe.txt";
int num = calculateLineNum(path);
~~~
';