MFC扩展DLL导出函数和变量
//global.h:MFC扩展DLL导出变量和函数的声明
extern "C"
{
int AFX_EXT_DATA total; //导出变量
int AFX_EXT_API add( int x, int y ); //导出函数
}
//global.cpp:MFC扩展DLL导出变量和函数定义
#include "StdAfx.h"
#include "global.h"
extern "C" int total;
int add(int x,int y)
{
total = x + y;
return total;
}
#include <iostream.h>
#include <afxver_.h>
//AFX_EXT_DATA、AFX_EXT_API宏的定义在afxver_.h头文件中
#pragma comment ( lib, "ExtDll.lib" )
#include "..\global.h"
int main(int argc, char* argv[])
{
cout << add(2,3) << endl;
cout << total;
return 0;
}
另外,在Visual C++下建立MFC扩展DLL时,MFC DLL向导会自动生成.def文件。因此,对于函数和变量,我们除了可以利用AFX_EXT_DATA、
AFX_EXT_API宏导出以外,在.def文件中定义导出也是一个很好的办法。与之相比,在.def文件中导出类却较麻烦。通常需要从工程生成的.map
文件中获得类的所有成员函数被C++编译器更改过的标识符,并且在.def文件中导出这些“奇怪”的标识符。因此,MFC扩展DLL通常以AFX_EXT_CLASS
宏直接声明导出类。
//global.h:MFC扩展DLL导出变量和函数的声明
extern "C"
{
int AFX_EXT_DATA total; //导出变量
int AFX_EXT_API add( int x, int y ); //导出函数
}
//global.cpp:MFC扩展DLL导出变量和函数定义
#include "StdAfx.h"
#include "global.h"
extern "C" int total;
int add(int x,int y)
{
total = x + y;
return total;
}
#include <iostream.h>
#include <afxver_.h>
//AFX_EXT_DATA、AFX_EXT_API宏的定义在afxver_.h头文件中
#pragma comment ( lib, "ExtDll.lib" )
#include "..\global.h"
int main(int argc, char* argv[])
{
cout << add(2,3) << endl;
cout << total;
return 0;
}
另外,在Visual C++下建立MFC扩展DLL时,MFC DLL向导会自动生成.def文件。因此,对于函数和变量,我们除了可以利用AFX_EXT_DATA、
AFX_EXT_API宏导出以外,在.def文件中定义导出也是一个很好的办法。与之相比,在.def文件中导出类却较麻烦。通常需要从工程生成的.map
文件中获得类的所有成员函数被C++编译器更改过的标识符,并且在.def文件中导出这些“奇怪”的标识符。因此,MFC扩展DLL通常以AFX_EXT_CLASS
宏直接声明导出类。