选择显示字体大小

vc++.net中定义和使用mfc dll


  什么是dll?

  dll指的是动态链接库(dynamic link library),它是一个可以被多个应用程序(甚至是不同语言编写的应用程序)同时调用的可执行二进制文件,是一个可共享的库。 dll是建立在客户/服务器通信的概念上,包含若干函数、类或资源的库文件,函数和数据被存储在一个dll(服务器)上并由一个或多个客户导出而使用,这些客户可以是应用程序或者是其它的dll。

  在下面我们将通过一个具体的例子来说明如何利用vc.net定义一个dll文件,并且在vc.net的应用程序中调用,这个例子的主要功能是通过dll获取系统的机器名、操作系统类型和ip地址。

  在vc.net中定义dll文件

  选择vc.net菜单项,选择文件->新建->项目,在弹出的新建项目的对话框中,选择项目类型为visual c++ 项目,类别为mfc的工程,在右边的模板中,选择mfc dll模板,给项目取名为testdll,选择好项目的位置,按确定健,进入应用程序设置。
 


  在应用程序设置中,我们可以看到,有三种dll类型,它们依次对应着三类dll。



  静态dll与共享dll的区别是:前者使用的是mfc的静态链接库,生成的dll文件长度大,一般不使用这种方式,后者使用mfc的动态链接库,生成的dll文件长度小;动态链接到mfc的共享dll所有输出的函数应该以如下语句开始(用于正确切换mfc模块状态): afx_manage_state(afxgetstaticmodulestate( )) 扩展dll用来建立mfc的派生类,只被用mfc类库所编写的应用程序调用。常规dll(包括静态与动态)的一个特点是在源文件里有一个继承cwinapp的类(从cwinapp派生,但没有消息循环),被导出的函数是c++类或者c++成员函数,调用常规dll的应用程序不必一定是mfc应用程序。扩展dll和常规dll不一样,它没有一个从cwinapp继承而来的类的对象,编译器默认了一个dll入口函数dllmain()作为对dll的初始化。

  另外还可以添加两个附加功能:自动化和windows套接字,如果选择了这两项,程序会做一些初始化,在这里我们就不做讨论了。

  在这个例子里,我们选择“使用共享的mfc dll”。

  添加代码:

  1、在工程中导入systeminfo.cpp和systeminfo.h文件,这两个文件用来获取本机的机器名,操作系统版本和本机ip列表,具体的定义,请参考源文件。

  在testdll.h头文件中,引入systeminfo.h头文件

#include "systeminfo.h"

  添加变量:

csysteminfo m_systeminfo;

  2、在ctestdllapp类中添加三个函数用户获取信息:

   //机器名
char* gethostname(void);
//系统类型
char* getsystemtype(void);
//ip地址
void getipaddresslist(char ** lpiplist,dword *lpnumber);
  函数定义如下:
//机器名
char* ctestdllapp::gethostname(void)
{
char* lpsz = new char[1024];
m_systeminfo.gethostname(lpsz);
return lpsz;
}
//系统类型
char* ctestdllapp::getsystemtype(void)
{
char* lpsz = new char[1024];
m_systeminfo.getlsystemtype(lpsz);
return lpsz;
}
//ip地址
void ctestdllapp::getipaddresslist(char ** lpiplist,dword *lpnumber)
{
m_systeminfo.getipaddresslist(lpiplist,lpnumber);
}
  3、添加输出函数:

  打开testdll工程中的“testdll.cpp”文件,在:
// 唯一的一个 ctestdllapp 对象
ctestdllapp theapp;

的后面添加输出的dll函数,函数定义如下:

/******************* 在这里添加输出函数 ***************************/
/********************************************
函数名称:gethostname
功能:获取本机的机器名称
返回:strhostname-本机机器名称
*********************************************/
extern "c" _declspec(dllexport) void gethostname(lptstr strhostname )
{
//如果是传递字符串需要使用strcpy拷贝字符串的地址,而不能直接等于。
strcpy(strhostname,theapp.gethostname());
}
/********************************************
函数名称:getsystemtype
功能:获取本机操作系统版本
返回:strsystemtype-本机操作系统版本
*********************************************/
extern "c" _declspec(dllexport) void getsystemtype(char * strsystemtype)
{
strcpy(strsystemtype,theapp.getsystemtype());
}
/********************************************
函数名称:getipaddresslist
功能:获取本机的ip地址
返回:lpiplist-本机的ip地址数组,lpnumber ip地址个数
*********************************************/
extern "c" _declspec(dllexport) void getipaddresslist(char ** lpiplist,dword *lpnumber)
{
theapp.getipaddresslist(lpiplist,lpnumber);
}
  最后编译工程文件,生成testdll.dll文件。

  至此,一个dll文件已经做好了。


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons