首页 > 代码库 > VC++6.0生成DLL

VC++6.0生成DLL

一、生成DLL文件

1、菜单项“文件”——>“新建”——>“工程”——>“Win32 Dynamic-Link Library”。创建一个工程项目,为这个工程取个名字为“test”。在这里我选择“创建一个简单的DLL”,此时在VC++界面上会有一个树形文件结构。

 

2、看到这个文件结构就大概明白,Source Files是放源码的,也就是以.cpp为后缀的文件;Header Files就是以放头文件,也就是以.h为后缀的文件。这个StdAfx.h和StdAfx.cpp都是自动生成的,这个StdAfx.h是一些默认的配置,这个不需要我们去动它。反正有了这个文件,我们只要在我们的源文件(如test.cpp)中引入这个头文件就行了。

test.cpp的默认文件如下:

#include "stdafx.h"BOOL APIENTRY DllMain( HANDLE hModule,                        DWORD  ul_reason_for_call,                        LPVOID lpReserved                     ){    return TRUE;}

 

3、假设现在我要实现一个a+b的功能,并将这个功能打包成一个动态链接库(DLL),供其他的程序调用。代码如下:

#include "stdafx.h"extern "C"_declspec(dllexport) int fun(int a,int b);BOOL APIENTRY DllMain( HANDLE hModule,                        DWORD  ul_reason_for_call,                        LPVOID lpReserved                     ){    return TRUE;}int fun(int a,int b) {    return a+b;}

extern "C"_declspec(dllexport) int fun(int a,int b)就是将这个方法导出,也就是把这个接口提供给其他程序。当然,如果还要定义其他的方法,都要用这个语句把这个接口暴露出来。

4、此时,我们“build”工程,也就是组建一下。如果成功的话,就能在工程目录下的Debug目录下找到一个“test.dll”的文件。

 

二、调用DLL文件

1、菜单项“文件”——>“工程”——>“Win32 Console Application”。创建一个Console应用,为这个应用取名为“calling”。此时再VC++的界面会出现一个属性文件结构。

 

2、我们将上面生成的test.dll文件放到我们这个应用的calling目录下;然后在calling.app文件中填写如下代码:

 1 #include "stdafx.h" 2 typedef int(*pfun)(int,int); 3  4 int main(int argc, char* argv[]) 5 { 6     HMODULE hModule=::LoadLibrary("test.dll"); 7     pfun newfun=(pfun)::GetProcAddress(hModule,"fun"); 8     int i=newfun(1,2); 9     printf("the result is %d\n",i);10     ::FreeLibrary(hModule);11     return 0;12 }

 

3、最后一步进行编译,运行,正常来说能通过,但是编译通不过,说“HMODULE”这样的关键字没有定义。打开标准配置头文件stdafx.h,内容默认如下:

#if !defined(AFX_STDAFX_H__94A5270F_2E93_4D92_8279_BDF69332D688__INCLUDED_)#define AFX_STDAFX_H__94A5270F_2E93_4D92_8279_BDF69332D688__INCLUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000#define WIN32_LEAN_AND_MEAN        // Exclude rarely-used stuff from Windows headers#include <stdio.h>

我们把这个文件添加如下:

#if !defined(AFX_STDAFX_H__9CD74EA8_AC0B_4487_98D5_E8704B271E95__INCLUDED_)#define AFX_STDAFX_H__9CD74EA8_AC0B_4487_98D5_E8704B271E95__INCLUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000#if def_DEBUG#define WIN32_LEAN_AND_MEAN        // Exclude rarely-used stuff from Windows headers#endif#include <stdio.h>#include <Windows.h>

这样就能编译通过,我们这个应用就能调用DLL文件中定义的方法了。

VC++6.0生成DLL