| 网站首页 | 文章中心 | 电子书下载 | 矢量图库 | 视频教程 | 素材下载 | 程序代码下载 | JS代码 | 论坛 | 
常用软件类:
|杀毒安全 |联络聊天 |网络软件 |多媒体类 |系统工具 |图形图像 |系统工具 |应用软件 |行业软件
开发设计类:
|动画制作 |图像处理 |3D设计 |操作系统 |站长学院 |网络相关 |WEB设计 |数据库类 |程序开发
VC++动态链接库编程之DLL典型实例
作者:未知    文章来源:网络    点击数:    更新时间:2006-8-29
 



 

/////////////////////////////////////////////////////////////////////////////
// English (U.S.) resources

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32

LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US

#pragma code_page(1252)
#endif //_WIN32


  并将其中所有的中文翻译为英文。这个DLL为我们提供了如图19所示的对话框资源。


图19英文对话框


  修改应用工程的InitInstance()函数,在

CResourceDllCallDlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();


  之前(即对话框显示之前)添加如下代码:

//获取操作系统的语言

WORD wLangPID = PRIMARYLANGID( GetSystemDefaultLangID() );
if( LANG_CHINESE == wLangPID )
{
 hLanguageDll = LoadLibrary( "ChineseDll.dll" ); //加载中文资源
}
else
{
 hLanguageDll = LoadLibrary( "EnglishDll.dll" ); //加载英文资源
}

if( NULL == hLanguageDll )
{
 AfxMessageBox( "Load DLL failure" );
 return FALSE;
}
AfxSetResourceHandle( hLanguageDll ); //设置当前的资源句柄


  这样的应用程序将具有自适应性质,在中文OS中显示中文资源,在英文OS中则显示英文资源。
7.3通信控制DLL

  我们在这里举一个串口通信类的例子。

  也许您需要了解一点串口通信的背景知识,其实串口到处都看得到,譬如PC机的COM口即为串行通讯口(简称串口)。如图20,打开Windows的设备管理器,我们看到了COM口。

  在Windows系统,需通过DCB(Device Control Block)对串口进行配置。利用Windows API GetCommState函数可以获取串口当前配置;利用SetCommState函数则可以设置串口通讯的参数。

  串行通信通常按以下四步进行:

  (1)打开串口;

  (2)配置串口;

  (3)数据传送;

  (4)关闭串口。


图20 PC的串口


  由此可见,我们需要给串口控制DLL提供如下四个接口函数:

//打开指定的串口,其参数port为端口号

BOOL ComOpen(int port); //在这个函数里使用默认的参数设置串口

//将打开的串口关闭

void ComClose(int port);

//将串口接收缓冲区中的数据放到buffer中

int GetComData(char *buf, int buf_len);

//将指定长度的数据发送到串口

int SendDataToCom(LPBYTE buf,int buf_Len);


  下面给出了DLL接口的主要源代码框架:

//com.h:com类通信接口

class AFX_EXT_CLASS com
{
 public:
  ComOpen(int port)
  {
   …
  }
  int SendDataToCom(LPBYTE buf,int buf_Len)
  {
   …
  }
  int GetComData(char *buf, int buf_len)
  {
   …
  }
  void ComClose()
  {
   …
  }
 }


  我们编写一控制台程序来演示DLL的调用:

#include <iostream>
#include <exception>

using namespace std;

#include <windows.h>
#include "com.h" //包含DLL中导出类的头文件 int main(int argc, char *argv[])
{
 try
 {
  char str[] = "com_class test";
  com com1;
  com1.ComOpen (1);
  for(int i=0; i<100; i++) //以同步方式写com的buffer
  {
   Sleep(500);
   com1.SendDataToCom (str,strlen(str));
  }
  com1.ComClose ();
 }
 catch(exception &e)
 {
  cout << e.what() << endl;
 }
 return 0;
}


  DLL的编写与调用方法及主要应用皆已讲完,在下一节里,我们将看到比较“高深”的主题――DLL木马。曾几何时,DLL木马成为了病毒的一种十分重要的形式,是DLL的什么特性使得它能够成为一种病毒?下一节我们将揭晓谜底。

上一页  [1] [2] 


相关文章