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<windows.h> #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动态连接库,你也可以尝试一下了!
(个人能力有限,希望大家批评指正!)

|