利用VC制作动态连接库(.dll)(采用Win32DLL)

类别:VC语言 点击:0 评论:0 推荐:
 

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

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

 

本文地址:http://com.8s8s.com/it/it257.htm