中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Visual C++ > 综合文章
利用VC制作动态连接库(.dll)(采用Win32DLL)
作者:未知 时间:2005-07-27 21:55 出处:CSDN 责编:chinaitpower
              摘要:利用VC制作动态连接库(.dll)(采用Win32DLL)

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

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

 


关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有