Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1680676
  • 博文数量: 584
  • 博客积分: 13857
  • 博客等级: 上将
  • 技术积分: 11883
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-16 09:34

分类: 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动态连接库,你也可以尝试一下了!

(个人能力有限,希望大家批评指正!)

阅读(1207) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~