WIN32 DLL创建动态链接库.
步骤如下:
<1> : 先开发一个DLL动态链接库:程序如下:
#include<afx.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 lpValueName,DWORD dwType,DWORD value,DWORD cbData){
HKEY m_Hkey;
RegCreatePara(HKEY_CURRENT_USER,"Software\\www.google.com\\admin",&m_Hkey);
RegSetValueEx(m_Hkey,lpValueName,0,REG_DWORD,(CONST BYTE *)value,cbData);
RegClosePara(m_Hkey);
}
_declspec(dllexport) void _stdcall ReadRegPara(LPTSTR lpValueName,LPBYTE lpData,LPDWORD lpcbData){
HKEY m_Hkey;
DWORD dwType;
RegCreatePara(HKEY_CURRENT_USER,"Software\\www.google.com\\admin",&m_Hkey);
RegQueryValueEx(m_Hkey,lpValueName,0,&dwType,lpData,lpcbData);
}
*/
def文件如下编写:
LIBRARY
EXPORTS
WriteToWinfile @1
ReadFromWinFile @2
<2> : 编译上面的文件,生成一个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);
FreeLibrary(hInst);
}
三种颜色标出了三种调用方式,读取值后,再利用MessageBox函数弹出一个对话框!
一个重要的说明:
windows中的LPTSTR 类型对应上char ch[]类型!
OK!
运行上面的结果,一切正常了!