全部博文(584)
分类: WINDOWS
2011-04-10 00:46:34
DLL动态连接库是一类使用很多的库文件,在工程中,通常使用VC调用底层的接口函数,而利用VB等快速开发工具完成界面的编程,这时dll成了枢纽,在此文章我们没有探讨高深的dll理论,而是制作dll文件的很简单的方法,希望能给你带来帮助!
闲话少说,下面我就直奔主题以一个消息对话框为例谈谈Win32DLL动态连接库的开发方法。(这也是一个很简单的方法!)
首先在VC开发环境下建立一个Win32 Dynamic-Link Library工程,添加3个文件,分别是mydll.h , mydll.cpp , mydll.def 文件。
然后我们分别介绍三个文件的具体内容:
(mydll.h 文件)
//这一部分的预定义是固定的.不用修改.
#ifdef __cplusplus
#define EXPORT extern "C" __declspec(dllexport)
#else
#define EXPORT __declspec(dllexport)
#endif
EXPORT BOOL CALLBACK MyMsgBox();
//.cpp中的函数在此说明
EXPORT BOOL CALLBACK aMsgBoxA(HWND, LPCSTR, LPCSTR);
EXPORT BOOL CALLBACK aMsgBoxW(HWND, LPCWSTR, LPCWSTR);
//根据不同的字符集都使用同一个函数aMsgBox
#ifdef UNICODE
#define aMsgBox aMsgBoxW
#else
#define aMsgBox aMsgBoxA
#endif
(mydll.cpp 文件)
#include
#include "mydll.h"
//DLL入口函数
int WINAPI DllMain(HINSTANCE hInstance, DWORD fdwReasion,PVOID pvReserved)
{
return TRUE;
}
///////////////////////////////输出函数////////////////////////////////////
EXPORT BOOL CALLBACK MyMsgBox()
{
return MessageBox(NULL, TEXT("MessageBox in DLL"), TEXT("USE DLL"), MB_ICONERROR);
}
//使用ASCII字符集
EXPORT BOOL CALLBACK aMsgBoxA(HWND hwnd, LPCSTR lpText, LPCSTR lpCaption)/
{
return MessageBoxA(hwnd, lpText, lpCaption, NULL);
}
//使用UNICODE字符集
EXPORT BOOL CALLBACK aMsgBoxW(HWND hwnd, LPCWSTR lpText, LPCWSTR lpCaption)
{
return MessageBoxW(hwnd, lpText, lpCaption, NULL);
}
(mydll.def 文件)
; mydll.def : Declares the module parameters for DLL.
LIBRARY "mydll" //此处与动态连接库文件同名
DESCRIPTION 'mydll test' //动态连接库描述
EXPORTS
; Explicit export can go here //函数说明
MyMsgBox
aMsgBoxA
aMsgBoxW
编译生成mydll.dll文件,可以在VC或VB中调用,在VC中调用时需要包含mydll.h文件,并且.dll文件需要和执行程序在一个目录下.
在VB中调用的方法如下:
Option Explicit
'声明自定义dll函数
Private Declare Function MyMsgBox Lib "D:\MyWork\VC_DLL\mydll\Debug\mydll.dll" () As Long
Private Declare Function aMsgBox Lib "D:\MyWork\VC_DLL\mydll\Debug\mydll.dll" _
Alias "aMsgBoxA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String) As Long
Private Sub Command1_Click()
Dim lRet As Long
lRet = MyMsgBox()
End Sub
Private Sub Command2_Click()
Dim lRet As Long
lRet = aMsgBox(Me.hwnd, "VC_DLL消息对话框", "aMsgBox函数")
End Sub
就这样一个简单的方法实现了.dll动态连接库,你也可以尝试一下了!
(个人能力有限,希望大家批评指正!)