环境:Visual C++ 2003, Windows
源代码: DLL Project的源代码及测试项目
我正在学习DLLs,谈不上对其有什么高屋建瓴的见解;本文只是(通过)编码让你看到并想知道代码是如何运行的。在本文中,我假定你知道如何使用你的编译器特性,比如设置目录路径等等。
为了建立项目,请选择Win32 控制台项目(Win32 Console Application),并且在应用程序设置标签(the advanced tab)上,选择DLL和空项目选项。DLLs可能并不如你想像的那样难。首先写你的头文件(header file);称为DLLTutorial.h。这个文件与其它头文件一样,其中只是一些函数的原型。
#ifndef _DLL_TUTORIAL_H_
#define _DLL_TUTORIAL_H_
#include <iostream>
#if defined DLL_EXPORT
#define DECLDIR __declspec(dllexport)
#else
#define DECLDIR __declspec(dllimport)
#endif
extern "C"
{
DECLDIR int Add( int a, int b );
DECLDIR void Function( void );
}
#endif
前面两行指示编译器只包含这个文件一次。extern "C"告诉编译器该部分可以在C/C++中使用。
在VC++中这里有两个方法来导出函数:
1、使用__declspec,一个Microsoft定义的关键字。
2、创建一个模块定义文件(Module-Definition File即.DEF)。第一种方法稍稍比第二种方法简单些,但两种都工作得很好。
__declspec(dllexport)导出函数符号到在你的DLL中的一个存储类。当下面一行被定义时我定义DECLDIR来运行这个函数,
#define DLL_EXPORT
同时也导入函数如果下面一行
#define DLL_EXPORT
没有在源文件中出现。在此情况下,你将导出函数Add(int a, int b)和Function()。
现在,你需要写一个将要称为DLLTutorial.cpp的源文件。
#include <iostream>
#include "DLL_Tutorial.h"
#define DLL_EXPORT
extern "C"
{
DECLDIR int Add( int a, int b )
{
return( a + b );
}
DECLDIR void Function( void )
{
std::cout << "DLL Called!" << std::endl;
}
}