WIN32 DLL动态链接库第2例

下面写一个用DLL访问注册表的程序:

步骤如下:

<1> : 新建一个DLL 工程:程序如下:

 

#include<afx.h>

#include"dll5.h"

 

_declspec(dllexport) void _stdcall WriteToWinfile(LPCTSTR appname,LPCTSTR keyname,LPCTSTR str){

 

       WriteProfileString(appname,keyname,str);

 

}

 

 

_declspec(dllexport) void _stdcall ReadFromWinFile(LPCTSTR appname,LPCTSTR keyname,LPCTSTR def,char* retstr,DWORD nsize){

      

       GetProfileString(appname,keyname,def,retstr,100);

       MessageBox(NULL,retstr,"read info",MB_OK);

}

 

_declspec(dllexport) void _stdcall WriteRegPara(LPCTSTR lpData,DWORD cbData){

 

              HKEY m_Hkey;

              RegCreatePara(HKEY_CURRENT_USER,"Software\\www.google.com\\admin",&m_Hkey);

              RegSetValue(m_Hkey,NULL,REG_SZ,lpData,cbData);

              //RegClosePara(m_Hkey);

}

 

_declspec(dllexport) void _stdcall ReadRegPara(DWORD cbData){

              HKEY m_Hkey;

              LONG lvalue;

              //RegCreatePara(HKEY_CURRENT_USER,"Software\\www.google.com\\admin",&m_Hkey);

              RegQueryValue(HKEY_CURRENT_USER,"Software\\www.google.com\\admin",NULL,&lvalue);

              char *pBuf=new char[lvalue];

              RegQueryValue(HKEY_CURRENT_USER,"Software\\www.google.com\\admin",pBuf,&lvalue);

 

              RegClosePara(m_Hkey);

 

              MessageBox(NULL,pBuf,"read reg",MB_OK);

 

 

 

}

<2> : 其中”dll5.h”文件中程序如下:

#ifndef DEF_REG

#define DEF_REG

 

void RegCreatePara(HKEY hKey,LPCTSTR lpSubKey,PHKEY phkResult){

 

       RegCreateKey(hKey,lpSubKey,phkResult);

 

}

 

void RegOpenPara(HKEY hKey,LPCTSTR lpSubKey,PHKEY phkResult){

 

       RegOpenKey(hKey,lpSubKey,phkResult);

}

 

void RegClosePara(HKEY hKey){

 

              RegCloseKey(hKey);

}

 

 

#endif

<3> 其中def文件的编码如下:

LIBRARY

EXPORTS

WriteToWinfile @1

ReadFromWinFile @2

WriteRegPara @3

ReadRegPara @4

<4> 编译dll工程,再将dll库文件放到新建的工程中,新建工程的程序如下:

 

#include<iostream>

#include<windows.h>

using namespace std;

void main(){

 

       char retstr[100];

       HINSTANCE hInst;

       hInst=LoadLibrary("dll5.dll");

       typedef void (_stdcall *ADDPROC)(LPCTSTR appname,LPCTSTR keyname,LPCTSTR str);

       ADDPROC WriteToWin=(ADDPROC)GetProcAddress(hInst,"WriteToWinfile");

       if(!WriteToWin){

              return;

       }

       WriteToWin("warden","nickname","www.google.com");

/*---

       char ip[16];

       DWORD num=0;

       num=GetProfileString("warden","nickname","def",ip,16);

       cout<<num<<endl<<ip<<endl;

---*/

/*----     

       GetProfileString("warden","nickname","liis",retstr,100);

       MessageBox(NULL,retstr,"read info",MB_OK);

----*/

       typedef void (_stdcall *ADDPROCD)(LPCTSTR appname,LPCTSTR keyname,LPCTSTR def,LPCTSTR retstr,DWORD nsize);

       ADDPROCD ReadFromWin=(ADDPROCD)GetProcAddress(hInst,"ReadFromWinFile");

       if(!ReadFromWin){

              return;

       }

 

       ReadFromWin("warden","nickname","lisi",retstr,100);

       MessageBox(NULL,retstr,"read info",MB_OK);

 

       typedef void(_stdcall * ADDPROE)(LPCTSTR lpData,DWORD cbData);

       ADDPROE Setregvalue=(ADDPROE)GetProcAddress(hInst,"WriteRegPara");

       if(!Setregvalue){

              MessageBox(NULL,"error infor","error",MB_OK);

              return ;

       }

 

       Setregvalue("warden",20);

 

       typedef void(_stdcall *ADDPROCF)(DWORD lpData);

       ADDPROCF ReadRegvalue=(ADDPROCF)GetProcAddress(hInst,"ReadRegPara");

       if(!ReadRegvalue){

              MessageBox(NULL,"error infor","error",MB_OK);

              return ;

       }

       ReadRegvalue(100);

 

       FreeLibrary(hInst);

}

编译无错误!

<5> : 运行程序,就会可以看到结果了!

 

 

posted @ 2013-04-21 00:02  MMLoveMeMM  阅读(203)  评论(0)    收藏  举报