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文件中定义的方法了。

posted on 2014-10-24 17:10  飞机说之代码也疯狂  阅读(3138)  评论(0编辑  收藏  举报